/* This file has been generated by the Hex-Rays decompiler.
   Copyright (c) 2007 Hex-Rays sprl <info@hex-rays.com>

   Detected compiler: Visual C++
*/

#include <windows.h>
#include <defs.h>


//-------------------------------------------------------------------------
// Data declarations

// extern void *std__basic_string_char_std__char_traits_char__std__allocator_char____npos; weak
extern struct _EXCEPTION_POINTERS ExceptionInfo; // idb
extern char aR[]; // idb
extern _UNKNOWN unk_432302; // weak
extern _UNKNOWN unk_432303; // weak
extern char aStat_template_[]; // idb
extern _UNKNOWN unk_432316; // weak
extern _UNKNOWN unk_432317; // weak
extern char aCannotOpenTemp[]; // idb
extern _UNKNOWN unk_43233B; // weak
extern char aW[]; // idb
extern _UNKNOWN unk_43234F; // weak
extern char aAuthReq[]; // idb
extern char aAuthRespOk[14]; // weak
extern char aAuthRespFailed[27]; // weak
extern char aErrorCodeDUrlS[]; // idb
extern char aUsageSPortPath[]; // idb
extern char aIncorrectPortN[]; // idb
extern char a32563257m[11]; // weak
extern char aIg11NaticqServ[]; // idb
extern _UNKNOWN unk_432457; // weak
extern char aWin32Build[]; // idb
extern _UNKNOWN unk_432465; // weak
extern _UNKNOWN unk_432466; // weak
extern char aInternalConver[]; // idb
extern char aWsastartupFail[]; // idb
extern char aSocketFailedWi[]; // idb
extern char aSetsockoptSo_r[]; // idb
extern char aBindFailedWith[]; // idb
extern char aListenFailedWi[]; // idb
extern char aMemoryAllocati[]; // idb
extern _UNKNOWN unk_432553; // weak
extern char aConnectFromSI[]; // idb
extern char aCreatethreadFa[]; // idb
extern _UNKNOWN unk_43258E; // weak
extern _UNKNOWN unk_43258F; // weak
extern char aFinishedServin[]; // idb
extern _UNKNOWN unk_4325C6; // weak
extern _UNKNOWN unk_4325C7; // weak
extern char aOk[]; // idb
extern _UNKNOWN unk_4325CB; // weak
extern char aNotFound[]; // idb
extern _UNKNOWN unk_4325D6; // weak
extern char aAllreadyExist[]; // idb
extern _UNKNOWN unk_4325E7; // weak
extern char aNetworkError[]; // idb
extern _UNKNOWN unk_4325F6; // weak
extern _UNKNOWN unk_4325F7; // weak
extern char aCanTAdd[]; // idb
extern _UNKNOWN unk_432602; // weak
extern _UNKNOWN unk_432603; // weak
extern char aLimitReached[]; // idb
extern _UNKNOWN unk_432612; // weak
extern _UNKNOWN unk_432613; // weak
extern char aAimIcqNotAlowe[]; // idb
extern _UNKNOWN unk_432629; // weak
extern _UNKNOWN unk_43262A; // weak
extern _UNKNOWN unk_43262B; // weak
extern char aContactNeedAut[]; // idb
extern _UNKNOWN unk_43263E; // weak
extern _UNKNOWN unk_43263F; // weak
extern char aUnknownCodeU[]; // idb
extern int byte_432650[]; // idb
extern _UNKNOWN unk_432666; // weak
extern _UNKNOWN unk_432667; // weak
extern char aU_8[]; // idb
extern _UNKNOWN unk_43266B; // weak
extern char aIcqUinIsU[]; // idb
extern _UNKNOWN unk_43267B; // weak
extern char aConnectFailedA[]; // idb
extern _UNKNOWN unk_432693; // weak
extern char aU[]; // idb
extern _UNKNOWN unk_432697; // weak
extern char aU_0[]; // idb
extern _UNKNOWN unk_43269B; // weak
extern char aU_1[]; // idb
extern _UNKNOWN unk_43269F; // weak
extern char aU_2[]; // idb
extern _UNKNOWN unk_4326A3; // weak
extern char aMale[5]; // weak
extern _UNKNOWN unk_4326A9; // weak
extern _UNKNOWN unk_4326AA; // weak
extern _UNKNOWN unk_4326AB; // weak
extern char aFemale[7]; // weak
extern _UNKNOWN unk_4326B3; // weak
extern char aUnknown[8]; // weak
extern char aU_3[]; // idb
extern _UNKNOWN unk_4326BF; // weak
extern char aNickSFirstname[]; // idb
extern _UNKNOWN unk_432716; // weak
extern _UNKNOWN unk_432717; // weak
extern char aU_4[]; // idb
extern _UNKNOWN unk_43271B; // weak
extern char aU_5[]; // idb
extern _UNKNOWN unk_43271F; // weak
extern char aU_6[]; // idb
extern _UNKNOWN unk_432723; // weak
extern char aU_7[]; // idb
extern _UNKNOWN unk_432727; // weak
extern char aErrorExpectedD[]; // idb
extern _UNKNOWN unk_432743; // weak
extern char aUnknownOpcodeU[]; // idb
extern _UNKNOWN unk_432756; // weak
extern _UNKNOWN unk_432757; // weak
extern char aDisconnectFrom[]; // idb
extern _UNKNOWN unk_43276F; // weak
extern char aThreadXUinURec[]; // idb
extern _UNKNOWN unk_432799; // weak
extern _UNKNOWN unk_43279A; // weak
extern char aLogin_oscar_ao[20]; // weak
extern struct_1 stru_4327C0[]; // idb
extern struct_2 stru_4327D0[33]; // weak
extern char a0946134e4c7f_1[39]; // weak
extern _UNKNOWN unk_432A07; // weak
extern char a094613494c7f11[39]; // weak
extern _UNKNOWN unk_432A2F; // weak
extern _UNKNOWN unk_432A32; // weak
extern char aUnknown_0[9]; // weak
extern _UNKNOWN unk_432A3D; // weak
extern char aIcqInc_Product[52]; // weak
extern wchar_t asc_432AC4[2]; // weak
extern char a0946134e4c7f_2[39]; // weak
extern char a0946134e4c7f_3[39]; // weak
extern _UNKNOWN unk_432B18; // weak
extern char a0946134e4c7f11[39]; // weak
extern char a0946134e4c7f_0[39]; // weak
extern char aNrRes[10]; // weak
extern char aLtRetEventOnre[41]; // weak
extern char aLtSrvGt[12]; // weak
extern char aLtIdGtLtIdGt[22]; // weak
extern char aLtValSrv_idGtU[43]; // weak
extern char aLtSrvGt_0[13]; // weak
extern char aLtSrvGt_1[12]; // weak
extern char aLtIdGtCawaysrv[30]; // weak
extern char aLtValSrv_idCaw[30]; // weak
extern char aLtRootGt[13]; // weak
extern char aLtCasxtrasetaw[60]; // weak
extern char aLtUinGt[13]; // weak
extern char aLtUinGt_0[12]; // weak
extern char aLtIndexGt[15]; // weak
extern char aLtIndexGt_0[14]; // weak
extern char aLtTitleGt[15]; // weak
extern char aLtTitleGt_0[14]; // weak
extern char aLtDescGt[14]; // weak
extern char aLtDescGt_0[13]; // weak
extern char aLtRootGt_0[14]; // weak
extern char aLtValGt[13]; // weak
extern char aLtSrvGt_2[13]; // weak
extern char aLtSrvGt_3[12]; // weak
extern char aLtIdGtCrandomi[36]; // weak
extern char aLtValSrv_idCra[57]; // weak
extern char aLtSrvGt_4[13]; // weak
extern char aLtRetGt[13]; // weak
extern char aResNr[14]; // weak
extern char aScriptPlugInRe[43]; // weak
extern char aScriptPlugIn_0[43]; // weak
extern char aQuery[8]; // weak
extern char aQuery_0[9]; // weak
extern char aNotify[9]; // weak
extern char aNotify_0[10]; // weak
extern char aLtPluginidGt[17]; // weak
extern char aLtPluginidGt_0[18]; // weak
extern char aSrvmng[7]; // weak
extern char aNotifyLtSrvGtL[30]; // weak
extern char aLtIdGt[12]; // weak
extern char aCawaysrv[9]; // weak
extern char aLtReqGtLtIdGt[22]; // weak
extern char aLtIdGt_0[12]; // weak
extern char aAwaystat[9]; // weak
extern char aLtSenderidGt[17]; // weak
extern char aLtSenderidGt_0[18]; // weak
extern char aNr[5]; // weak
extern char aNr_0[6]; // weak
extern char aRes[6]; // weak
extern char aRes_0[7]; // weak
extern char aLtUinGt_1[12]; // weak
extern char aLtUinGt_2[13]; // weak
extern char aLtIndexGt_1[14]; // weak
extern char aLtIndexGt_2[15]; // weak
extern char aLtTitleGt_1[14]; // weak
extern char aLtTitleGt_2[15]; // weak
extern char aLtDescGt_1[13]; // weak
extern char aLtDescGt_2[14]; // weak
extern int (__stdcall *off_433158)(int); // weak
extern int (__stdcall *off_433164)(int); // weak
extern int (__stdcall *off_433170)(int); // weak
extern int (__stdcall *off_43317C)(int); // weak
extern int (__stdcall *off_43318C)(int); // weak
extern int (__stdcall *off_43319C)(int); // weak
extern int (__stdcall *off_4331AC)(int); // weak
extern int (__stdcall *off_4331B4)(int); // weak
extern int (__stdcall *off_4331BC)(int); // weak
extern char byte_4331C0[]; // idb
extern int (__stdcall *off_433204)(int); // weak
extern int (__stdcall *off_433214)(int); // weak
extern _UNKNOWN unk_433258; // weak
extern int dword_4334B0[]; // idb
extern int (__stdcall *off_4334EC)(int); // weak
extern _UNKNOWN unk_433C7C; // weak
extern _UNKNOWN unk_433D08; // weak
extern _UNKNOWN unk_433D88; // weak
extern _UNKNOWN unk_433DC0; // weak
extern _UNKNOWN unk_433DFC; // weak
extern int dword_43901C; // weak
extern int dword_439020; // weak
extern char byte_439090[]; // idb
extern int dword_4392B0; // weak
extern int dword_4392B4; // weak
extern int dword_4392BC; // weak
extern int dword_439300; // weak
extern int dword_439308; // weak
extern __int16 word_439394; // weak
extern __int16 word_439398; // weak
extern __int16 word_43939C; // weak
extern __int16 word_4393A0; // weak
extern int dword_4393A4; // weak
extern int dword_4393A8; // weak
extern int dword_4393AC; // weak
extern int dword_4393B0; // weak
extern int dword_4393B4; // weak
extern int dword_4393B8; // weak
extern int dword_4393BC; // weak
extern int dword_4393C0; // weak
extern __int16 word_4393C4; // weak
extern int dword_4393C8; // weak
extern int dword_4393CC; // weak
extern __int16 word_4393D0; // weak
extern struct_0 stru_4395E4[2]; // weak
extern __int16 clientsNum; // weak
extern char *path_to_stat; // idb
extern char *forbid_mod; // idb
extern char *forbid_build_2058; // idb
extern _UNKNOWN unk_439624; // weak
extern _UNKNOWN unk_439640; // weak

//-------------------------------------------------------------------------
// Function declarations

#define __thiscall __cdecl // Test compile in C mode

// _DWORD __stdcall sub_401000(_DWORD); weak
// _DWORD unknown_libname_1(); weak
// _DWORD std___Init_locks____Init_locks(); weak
int __thiscall sub_401060(int this, int a2);
int __fastcall sub_401080(int a1);
bool __thiscall sub_4010B0(int this, int a2);
char __fastcall sub_4010D0(int a1);
int __thiscall sub_4010F0(int this, char a2);
int __fastcall sub_401120(int a1);
void *__thiscall sub_401140(int this, char a2);
// void *__cdecl operator new(unsigned int, void *); idb
int __thiscall sub_401180(int this, int a2);
int __fastcall sub_4011F0(int a1);
int __fastcall sub_401220(int a1);
void *__thiscall sub_401240(int this, char a2);
int __thiscall sub_401270(int this, int a2);
int __fastcall sub_4012A0(int a1);
void *__thiscall sub_4012C0(int this, char a2);
int __thiscall sub_4012F0(int this, int a2);
int __thiscall sub_401370(int this, u_short a2, __int16 a3);
int __thiscall sub_4013E0(int this, u_long hostlong, __int16 a3); // idb
int __thiscall sub_401450(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, __int16 a9);
int __thiscall sub_4014E0(int this, int a2, __int16 a3);
int __thiscall sub_401550(int this, int a2, int a3, __int16 a4);
void *__thiscall sub_4015E0(int this, char a2);
void *__thiscall sub_401610(int this, char a2);
void *__thiscall sub_401640(int this, char a2);
void *__thiscall sub_401670(int this, char a2);
void *__thiscall sub_4016A0(int this, char a2);
void *__thiscall sub_4016D0(int this, char a2);
int __fastcall sub_401700(int a1);
int __thiscall sub_401770(int this, unsigned int a2);
int __fastcall sub_4017F0(int a1);
int __thiscall sub_401810(int this, int a2);
void *__thiscall sub_401990(int this, unsigned int a2);
int __fastcall sub_4019B0(int a1);
int __thiscall sub_4019D0(int this, unsigned int a2);
int __fastcall sub_401A00(int a1);
int __fastcall sub_401A60(int a1);
int __fastcall sub_401AD0(int a1);
int __thiscall sub_401AF0(int this, int a2);
int __thiscall sub_401C80(int this, unsigned int a2);
int __thiscall sub_401CB0(int this, int a2);
int __fastcall sub_401D30(int a1);
int __fastcall sub_401D90(int a1);
int __fastcall sub_401E00(int a1);
int __thiscall sub_401E60(int this, int a2);
int __thiscall sub_401EE0(int this, int a2, int a3);
int __thiscall sub_401F20(void **this);
char __thiscall sub_401F40(int this, unsigned int a2, int a3);
int __fastcall sub_401FE0(int a1);
void *__thiscall sub_402020(int this, unsigned int a2, char a3);
int __thiscall sub_4020E0(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
char __thiscall sub_402180(int this, unsigned int a2);
int __stdcall sub_402200(int a1, int a2);
int __fastcall sub_402230(int a1);
int __fastcall sub_4022A0(int a1);
int __thiscall sub_4022E0(int this, int a2, int a3, int a4, int a5);
int __thiscall sub_402360(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
char __thiscall sub_402400(int this, unsigned int a2);
int __stdcall sub_402480(int a1, int a2);
int __fastcall sub_4024B0(int a1);
int __stdcall sub_402530(void *a1, int a2, int a3);
int __thiscall sub_402570(void **this);
int __fastcall sub_4025A0(int a1);
int __fastcall sub_4025E0(int a1);
int __thiscall sub_402600(int this, int a2, int a3, int a4, int a5);
char __thiscall sub_402680(int this, unsigned int a2);
int __fastcall sub_402700(int a1);
int __stdcall sub_402770(void *a1, int a2, int a3);
int __thiscall sub_4027B0(int this, char a2);
int __thiscall sub_4027F0(int this, int a2);
int __cdecl sub_402810();
void *__thiscall sub_402830(int this, int a2, char a3, int a4, int a5);
int __stdcall sub_402B50(int a1, int a2, int a3);
// _DWORD __stdcall std__allocator_char___allocate(_DWORD); weak
// int __stdcall unknown_libname_2(void *, int); idb
signed int __cdecl sub_402BC0();
void *__thiscall sub_402BE0(int this, int a2, int a3, int a4, int a5);
void *__stdcall sub_402F80(unsigned int a1);
int __thiscall sub_402FA0(int this, int a2);
signed int __cdecl sub_402FD0();
int __stdcall sub_402FF0(int a1, int a2);
void *__thiscall sub_403020(int this, int a2, int a3, int a4, int a5);
int __thiscall sub_403460(int this, char a2);
void *__stdcall sub_403510(unsigned int a1);
int __thiscall sub_403530(int this, int a2);
int __thiscall sub_4035A0(int this, int a2);
int __thiscall sub_4035F0(int this, int a2, int a3);
int __thiscall sub_403630(int this, int a2);
int __thiscall sub_4036B0(int this, int a2);
int __thiscall sub_4036E0(int this, int a2);
int __thiscall sub_4037A0(int this, int a2);
// _DWORD std__allocator_char___max_size(); weak
void *__stdcall sub_4038C0(unsigned int a1);
int __thiscall sub_4038E0(int this, int a2);
signed int __cdecl sub_4039E0();
signed int __cdecl sub_403A10();
int __thiscall sub_403A40(int this, int a2);
int __thiscall sub_403A60(int this, int a2);
int __thiscall sub_403A90(int this, int a2);
void *__thiscall sub_403B10(int this, char a2, char a3);
void *__thiscall sub_403B50(int this, char a2, int a3, char a4, int a5);
void *__thiscall sub_403B90(int this, char a2, int a3, char a4, int a5);
int __thiscall sub_403BD0(int this, char a2, int a3, char a4, int a5);
char *__cdecl sub_403C10(char a1, char a2, void *Dst); // idb
int __cdecl sub_403C80(char a1, char a2, int a3);
// _DWORD __stdcall unknown_libname_3(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_403D20();
int __cdecl sub_403D60(int a1, int a2);
int __cdecl sub_403DA0(void *a1, int a2, int a3);
int __cdecl sub_403DF0(void *a1, int a2, int a3);
// int __stdcall unknown_libname_4(char, char, void *Dst); idb
int __cdecl sub_403E70(char a1, char a2, int a3);
void *__cdecl sub_403EA0(char a1, char a2, int a3);
int __cdecl sub_403F10(int a1, int a2, int a3);
// _DWORD __stdcall unknown_libname_5(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_403FE0(char a1, char a2, int a3);
int __cdecl sub_404010(char a1, char a2, int a3);
void *__cdecl sub_404080(unsigned int a1);
int __cdecl sub_4040D0(int a1, int a2);
// _DWORD __stdcall unknown_libname_6(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_404140(char a1, char a2, int a3);
int __cdecl sub_404170(char a1, char a2, int a3);
void *__cdecl sub_4041E0(unsigned int a1);
char *__stdcall sub_404230(char a1, int a2, char a3, int a4, void *Dst); // idb
void *__cdecl sub_404260(unsigned int a1);
void *__stdcall sub_4042B0(char a1, int a2, char a3, int a4, void *a5);
void *__thiscall sub_404310(int this, char a2, char a3, int a4);
void *__thiscall sub_4043A0(int this, char a2, int a3, char a4, int a5, int a6);
void *__thiscall sub_404430(int this, char a2, int a3, char a4, int a5, int a6);
int __thiscall sub_4044C0(int this, char a2, int a3, char a4, int a5, int a6);
char *__cdecl sub_404530(void *Src, int a2, void *Dst); // idb
int __cdecl sub_404570(int a1);
int __cdecl sub_404590(int a1, int a2, int a3);
void *__cdecl sub_4045F0(char a1, char a2, void *a3);
int __cdecl sub_404650(int a1, int a2);
int __cdecl sub_404680(void *a1, int a2, int a3);
int __cdecl sub_404740(void *a1, int a2, int a3);
char *__cdecl sub_404800(char a1, char a2, void *Dst); // idb
int __cdecl sub_404850(int a1, int a2, int a3);
void *__cdecl sub_404880(void *Src, int a2, int a3); // idb
int __cdecl sub_4048D0(int a1, int a2, int a3);
void *__cdecl sub_4048F0(char a1, char a2, void *a3);
int __cdecl sub_404940(int a1, int a2, int a3);
int __cdecl sub_404970(int a1, int a2, int a3);
int __cdecl sub_4049C0(int a1, int a2);
void *__cdecl sub_4049F0(char a1, char a2, void *a3);
int __cdecl sub_404A40(int a1, int a2, int a3);
int __cdecl sub_404A70(int a1, int a2, int a3);
char *__cdecl sub_404AC0(char a1, int a2, char a3, int a4, void *Dst); // idb
void *__cdecl sub_404B20(char a1, int a2, char a3, int a4, void *a5);
int __thiscall sub_404B80(int this, int a2);
int __thiscall sub_404BB0(int this, int a2);
int __stdcall sub_404C30(void *a1, int a2);
void *__stdcall sub_404C50(int a1);
int __stdcall sub_404C70(void *a1, int a2);
void *__stdcall sub_404C90(int a1);
void *__thiscall sub_404CB0(int this, int a2, char a3, char a4, char a5);
void *__thiscall sub_404CF0(int this, int a2, char a3, char a4, int a5, char a6, int a7);
void *__thiscall sub_404D40(int this, int a2, char a3, char a4, int a5, char a6, int a7);
int __thiscall sub_404D90(int this, int a2, int a3, int a4, int a5, char a6, int a7, char a8, int a9);
int __cdecl sub_404DE0(int a1, int a2, int a3);
void *__cdecl sub_404E20(int a1, int a2, void *a3);
char *__cdecl sub_404EE0(char a1, char a2, void *Dst); // idb
void *__cdecl sub_404F00(void *Src, int a2, int a3); // idb
int __cdecl sub_404F40(int a1, int a2, int a3);
void *__cdecl sub_404F80(char a1, char a2, void *a3);
int __cdecl sub_404FA0(int a1, int a2, int a3);
void *__cdecl sub_405000(char a1, char a2, void *a3);
int __cdecl sub_405020(int a1, int a2, int a3);
char *__cdecl sub_405080(void *Src, int a2, void *Dst); // idb
int __cdecl sub_4050C0(void *a1, int a2);
void *__cdecl sub_405140(int a1);
int __cdecl sub_405150(void *a1, int a2);
void *__cdecl sub_4051D0(int a1);
void *__thiscall sub_4051E0(int this, char a2);
void *__thiscall sub_405210(int this, char a2);
void *__thiscall sub_405240(int this, int a2, char a3, char a4, char a5, int a6);
void *__thiscall sub_4054C0(int this, int a2, char a3, char a4, int a5, char a6, int a7, int a8);
void *__thiscall sub_405750(int this, int a2, char a3, char a4, int a5, char a6, int a7, int a8);
int __thiscall sub_4059F0(int this, int a2, int a3, int a4, int a5, char a6, int a7, char a8, int a9, int a10);
int __cdecl sub_405A90(int a1, int a2, int a3);
int __cdecl sub_405AD0(int a1, int a2, int a3);
void *__cdecl sub_405B00(char a1, char a2, void *a3);
int __cdecl sub_405B60(int a1, int a2, int a3);
int __stdcall sub_405B90(int a1, int a2);
int __thiscall sub_405BE0(int this, int a2);
int __cdecl sub_405C30(int a1, int a2, int a3);
// int __stdcall unknown_libname_7(char, char, void *Dst); idb
int __cdecl sub_405C90(char a1, int a2, char a3, int a4, int a5);
int __cdecl sub_405CD0(char a1, int a2, char a3, int a4, int a5);
int __stdcall sub_405D10(char a1, int a2, char a3, int a4, int a5);
int __thiscall sub_405D40(int this, char a2, int a3, char a4, int a5);
int __cdecl sub_405DA0(int a1, int a2, int a3);
void *__cdecl sub_405DD0(int a1, int a2, void *a3);
char *__cdecl sub_405E90(char a1, char a2, void *Dst); // idb
int __cdecl sub_405EF0(char a1, int a2, char a3, int a4, int a5);
int __cdecl sub_405F10(char a1, int a2, char a3, int a4, int a5);
int __cdecl sub_405F30(char a1, int a2, char a3, int a4, int a5);
bool __thiscall sub_405F90(int this, char a2, int a3, char a4, int a5, int a6);
int __fastcall sub_406070(int a1);
int __fastcall sub_406090(int a1);
int __thiscall sub_4060B0(int this, int a2);
int __thiscall sub_4060D0(int this, int a2);
int __fastcall sub_406100(int a1);
int __fastcall sub_406150(int a1);
int __thiscall sub_4061B0(int this, int a2);
int __cdecl sub_406200();
int __cdecl sub_406220(int a1, int a2, int a3);
void *__stdcall sub_4062F0(void *a1, void *a2);
void *__cdecl sub_406310(void *a1, void *a2);
int __thiscall sub_406350(int this, int a2);
int __fastcall sub_406380(int a1);
void *__thiscall sub_4063A0(int this, char a2);
_DWORD sub_406400(); // weak
_DWORD sub_4065D0(); // weak
int __thiscall sub_406A70(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
int __thiscall sub_406AE0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
int __thiscall sub_406B50(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9);
int __thiscall sub_406BC0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, char a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24);
_DWORD sub_406C80(); // weak
int __thiscall sub_406D30(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, __int16 a17, char a18, void *a19, void *a20); // idb
int __stdcall sub_406E60(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24);
int __thiscall sub_406E80(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15);
int __thiscall sub_406EE0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16);
int __stdcall sub_406F40(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11);
int __stdcall sub_406F60(char a1, int a2, int a3, int a4, int a5, int a6, int a7);
int __thiscall sub_406F80(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, char a17, int a18, int a19, int a20, int a21, int a22, int a23);
int __stdcall sub_406FF0(int a1, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9);
int __stdcall sub_407010(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24, int a25);
int __stdcall sub_407030(int a1, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
int __stdcall sub_407050(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8);
int __thiscall setNetworkTimeout(int this, int a2);
int __fastcall sub_407090(int a1);
int __fastcall sub_4070B0(int a1);
int __thiscall sub_407110(int this, char a2, __int16 a3);
void *__thiscall sub_407190(int this, char a2);
int __fastcall sub_4071C0(int a1);
int __fastcall sub_4071E0(int a1);
int __fastcall sub_407200(int a1);
int __fastcall sub_407220(int a1);
void *__thiscall sub_407240(int this, char a2);
int __fastcall sub_407270(int a1);
int __thiscall sub_407290(int this, int a2);
int __fastcall sub_4078E0(int a1);
int __thiscall sub_4079E0(int this, int a2);
int __thiscall sub_407C90(int this, int a2);
_DWORD sub_407EF0(); // weak
int __fastcall sub_407F10(int a1);
int __thiscall sub_407F30(int this, int a2);
int __thiscall sub_407F60(int this, int a2);
int __thiscall sub_407FC0(int this, int a2);
int __thiscall sub_407FF0(int this, int a2);
int __fastcall sub_4080D0(int a1);
int __fastcall sub_4080F0(int a1);
bool __fastcall sub_408180(int a1);
int __thiscall sub_4081A0(int this, int a2);
int __fastcall sub_408220(int a1);
int __thiscall sub_408280(int this, int a2);
int __thiscall sub_408400(int this, int a2);
int __fastcall sub_408480(int a1);
int __fastcall sub_4084E0(int a1);
int __fastcall sub_408550(int a1);
int __fastcall sub_4085B0(int a1);
int __thiscall sub_4085D0(int this, unsigned int a2);
int __thiscall sub_408610(int this, int a2);
int __thiscall sub_408690(int this, int a2, int a3, unsigned int a4);
int __fastcall sub_408700(int a1);
int __fastcall sub_408760(int a1);
int __fastcall sub_4087D0(int a1);
int __fastcall sub_408830(int a1);
int __thiscall sub_408850(int this, unsigned int a2);
int __thiscall sub_408880(int this, int a2);
int __thiscall sub_408900(int this, int a2, int a3, unsigned int a4);
int __fastcall sub_408970(int a1);
int __fastcall sub_4089D0(int a1);
int __fastcall sub_408A40(int a1);
int __fastcall sub_408A60(int a1);
int __thiscall sub_408A80(int this, unsigned int a2);
int __thiscall sub_408AB0(int this, void **a2);
int __fastcall sub_408B30(int a1);
int __fastcall sub_408B90(int a1);
int __fastcall sub_408C00(int a1);
int __fastcall sub_408C20(int a1);
int __thiscall sub_408C40(int this, unsigned int a2);
int __thiscall sub_408C70(int this, int a2);
int __fastcall sub_408CF0(int a1);
int __fastcall sub_408D50(int a1);
int __fastcall sub_408D80(int a1);
int __thiscall sub_408DE0(int this, int a2);
int __fastcall sub_408E10(int a1);
int __thiscall sub_408E40(int this, int a2);
int __fastcall sub_408FA0(int a1);
int __thiscall sub_409000(int this, int a2, int a3);
int __fastcall sub_4090A0(int a1);
int __fastcall sub_4090D0(int a1);
int __thiscall sub_409130(int this, int a2, int a3);
int __fastcall sub_409300(int a1);
int __thiscall sub_409360(int this, unsigned int a2);
int __fastcall sub_409390(int a1);
int __fastcall sub_409400(int a1);
int __fastcall sub_409420(int a1);
int __thiscall sub_409440(int this, int a2, int a3);
int __thiscall sub_409470(int this, int a2, int a3);
int __fastcall sub_4094B0(int a1);
int __fastcall sub_4094D0(int a1);
int __thiscall sub_4094F0(int this, unsigned int a2, int a3);
int __fastcall sub_409560(int a1);
int __thiscall sub_4095C0(int this, unsigned int a2);
int __fastcall sub_4095F0(int a1);
int __thiscall sub_409610(int this, int a2, int a3);
int __fastcall sub_409640(int a1);
int __fastcall sub_4096A0(int a1);
int __fastcall sub_4099B0(int a1);
int __thiscall sub_409A10(void **this);
int __thiscall sub_409A30(void **this);
int __thiscall sub_409A50(void **this);
int __thiscall sub_409A70(int this, int a2, int a3, char a4, int a5);
int __fastcall sub_409AF0(int a1);
int __thiscall sub_409B30(int this, int a2, int a3, int a4, int a5);
int __thiscall sub_409BB0(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
char __thiscall sub_409C50(int this, unsigned int a2);
int __stdcall sub_409CD0(int a1, int a2);
int __fastcall sub_409D00(int a1);
int __stdcall sub_409D70(void *a1, int a2, int a3);
int __fastcall sub_409DB0(int a1);
int __thiscall sub_409DF0(int this, int a2, int a3, int a4, int a5);
int __thiscall sub_409E70(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
char __thiscall sub_409F10(int this, unsigned int a2);
int __stdcall sub_409FA0(int a1, int a2);
int __fastcall sub_409FD0(int a1);
int __stdcall sub_40A050(void *a1, int a2, int a3);
// _DWORD _LocaleUpdate__GetLocaleT(); weak
int __thiscall sub_40A0A0(int this, int a2, int a3, int a4, int a5);
int __thiscall sub_40A120(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
int __stdcall sub_40A1C0(int a1, int a2);
int __fastcall sub_40A1F0(int a1);
int __stdcall sub_40A260(void *a1, int a2, int a3);
int __fastcall sub_40A2A0(int a1);
int __thiscall sub_40A2E0(int this, int a2, int a3, int a4, void **a5);
int __thiscall sub_40A360(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
char __thiscall sub_40A400(int this, unsigned int a2);
int __fastcall sub_40A480(int a1);
int __stdcall sub_40A4F0(void *a1, int a2, void **a3);
int __fastcall sub_40A530(int a1);
int __thiscall sub_40A570(int this, int a2, int a3, char a4, int a5);
int __thiscall sub_40A5F0(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
char __thiscall sub_40A690(int this, int a2);
int __fastcall sub_40A710(int a1);
int __stdcall sub_40A780(int a1, int a2, int a3);
int __thiscall sub_40A7C0(int this, int *a2, int a3);
int __fastcall sub_40A830(int a1);
int __stdcall sub_40A900(int a1, int a2);
int __cdecl sub_40A920(int a1);
int __thiscall sub_40A940(int this, int *a2, int a3);
int __thiscall sub_40A9B0(int this, int a2, int a3, int a4, int a5);
int __thiscall sub_40AFD0(int this, int a2, int a3);
int __fastcall sub_40B000(int a1);
int __cdecl sub_40B0D0(int a1);
int __cdecl sub_40B0E0(int a1);
int __cdecl sub_40B0F0(int a1);
int __thiscall sub_40B100(int this, int *a2, int a3);
int __thiscall sub_40B170(int this, void *a2); // idb
int __thiscall sub_40B1F0(int this, int a2, char a3, int a4, int a5);
int __fastcall sub_40B670(int a1);
char __thiscall sub_40B740(int this, int a2, int a3);
char __thiscall sub_40B770(int this, unsigned int a2);
int __fastcall sub_40B7F0(int a1);
int __thiscall sub_40B870(int this, int a2, int a3);
int __thiscall sub_40B890(int this, int a2, int a3);
int __thiscall sub_40B900(int this, int a2);
int __thiscall sub_40B920(int this, int a2, int a3);
int __fastcall sub_40B950(int a1);
int __fastcall sub_40B970(int a1);
int __fastcall sub_40B9C0(int a1);
char __thiscall sub_40B9E0(int this, unsigned int a2, int a3);
int __thiscall sub_40BA90(int this, unsigned int a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9);
int __fastcall sub_40BB90(int a1);
int __thiscall sub_40BC10(int this, int a2);
int __fastcall sub_40BCD0(int a1);
char __fastcall sub_40BD40(int a1);
int __thiscall sub_40BD60(int this, int a2);
int __thiscall sub_40C480(int this, int a2);
void *__thiscall sub_40C580(int this, int a2, int a3, int a4, int a5);
int __cdecl sub_40C910();
signed int __cdecl sub_40C990();
void *__thiscall sub_40C9B0(int this, int a2, int a3, int a4, int a5);
void *__stdcall sub_40CE30(unsigned int a1);
signed int __cdecl sub_40CE50();
void *__thiscall sub_40CE70(int this, int a2, int a3, int a4, int a5);
void *__stdcall sub_40D200(unsigned int a1);
signed int __cdecl sub_40D220();
int __stdcall sub_40D240(int a1, int a2);
int __thiscall sub_40D270(int this, int a2, int a3, int a4, void **a5);
int __cdecl sub_40D5C0();
int __thiscall sub_40D5E0(int this, int a2, char a3, int a4, int a5);
int __stdcall sub_40D930(int a1);
int __cdecl sub_40D950(int a1);
int __thiscall sub_40D960(int this, int a2, int a3, int a4, char a5, int a6);
int __fastcall sub_40DA10(int a1);
int __fastcall sub_40DA80(int a1);
int __thiscall sub_40DAA0(int this, int *a2, char a3);
// _DWORD __stdcall std___Init_locks__operator_(_DWORD); weak
int __cdecl sub_40DAF0(int a1);
int __cdecl sub_40DB00(int a1);
int __thiscall sub_40DB10(int this, int a2);
// _DWORD std___Mpunct_wchar_t___do_frac_digits(); weak
int __thiscall sub_40DB60(int this, int a2, int a3);
int __thiscall sub_40DD30(int this, int a2, int a3, int a4, char a5, int a6);
int __fastcall sub_40DDE0(int a1);
int __thiscall sub_40DE50(int this, int a2, char a3, int a4, int a5);
int __thiscall sub_40E2D0(int this, int a2);
int __cdecl sub_40E360(int a1);
int __cdecl sub_40E370(int a1);
int __cdecl sub_40E380();
int __thiscall sub_40E3A0(int this, int a2, int a3, int a4, char a5, int a6);
int __fastcall sub_40E450(int a1);
int __thiscall sub_40E4C0(int this, int a2);
int __thiscall sub_40E5F0(int this, int a2);
void *__thiscall sub_40E720(int this, int a2, int a3, int a4, int a5, char a6);
int __stdcall sub_40E800(int a1);
signed int __cdecl sub_40E820();
int __stdcall sub_40E840(void *a1, void *a2);
void *__stdcall sub_40E870(unsigned int a1);
int __thiscall sub_40E890(int this, int a2, int a3);
int __fastcall sub_40E8D0(int a1);
int __fastcall sub_40E8F0(int a1);
int __fastcall sub_40E910(int a1);
int __fastcall sub_40E930(int a1);
int __thiscall sub_40E950(int this, int a2);
int __thiscall sub_40E9E0(int this, int a2);
bool __thiscall sub_40EA30(int this, int a2);
int __fastcall sub_40EA60(int a1);
int __fastcall sub_40EA80(int a1);
int __thiscall sub_40EB60(int this, int a2);
int __thiscall sub_40EB90(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6);
int __stdcall sub_40EC30(void *a1, void *a2);
void *__thiscall sub_40EC60(int this, int a2, int a3, int a4, int a5);
int __stdcall sub_40F010(void *a1, int a2, int a3);
int __thiscall sub_40F050(int this, int a2);
int __fastcall sub_40F0A0(int a1);
int __thiscall sub_40F0F0(int this, int a2, int a3);
int __thiscall sub_40F130(int this, int a2);
int __thiscall sub_40F180(int this, int a2, int a3);
int __thiscall sub_40F1C0(int this, int a2);
int __thiscall sub_40F210(int this, int a2, int a3);
int __thiscall sub_40F250(int this, int a2);
int __thiscall sub_40F2A0(int this, int a2, int a3);
int __thiscall sub_40F2E0(int this, int a2);
int __fastcall sub_40F310(int a1);
int __thiscall sub_40F330(int this, int a2);
signed int __cdecl sub_40F360();
signed int __cdecl sub_40F390();
signed int __cdecl sub_40F3C0();
// _DWORD unknown_libname_8(); weak
int __cdecl sub_40F420(int a1);
int __thiscall sub_40F430(int this, int a2, int a3, int a4);
int __fastcall sub_40FC10(int a1);
int __fastcall sub_40FC70(int a1);
int __thiscall sub_40FC90(int this, int a2);
int __thiscall sub_40FDC0(int this, int a2);
void *__fastcall sub_40FEF0(int a1);
int __thiscall sub_410060(int this, int *a2, char a3);
int __cdecl sub_4100A0(int a1);
int __thiscall sub_4100B0(int this, int a2, int a3, int a4);
signed int __cdecl sub_4100E0();
int __thiscall sub_410100(int this, int a2, int a3, int a4);
int __fastcall sub_4108E0(int a1);
int __thiscall sub_410940(int this, int a2);
int __fastcall sub_410A70(int a1);
int __thiscall sub_410A90(int this, int a2);
void *__fastcall sub_410BC0(int a1);
void *__thiscall sub_410D30(int this, int a2, int a3, int a4, int a5, char a6);
int __thiscall sub_410E20(int this, int a2, int a3, int a4);
int __cdecl sub_411600(int a1);
void *__fastcall sub_411640(int a1);
void *__stdcall sub_4117B0(unsigned int a1);
signed int __cdecl sub_4117D0();
int __thiscall sub_411800(int this, int a2, int a3);
int __fastcall sub_411840(int a1);
int __fastcall sub_411920(int a1);
int __thiscall sub_411940(int this, int a2, int a3);
int __fastcall sub_411980(int a1);
int __fastcall sub_411AB0(int a1);
char __thiscall sub_411B90(int this, int a2);
int __thiscall sub_411BE0(int this, int a2, int a3);
int __fastcall sub_411C20(int a1);
int __thiscall sub_411D50(int this, int a2, int a3, unsigned int a4);
int __thiscall sub_411D70(int this, int a2);
int __thiscall sub_411D90(int this, int a2);
int __thiscall sub_411DB0(int this, int a2);
int __thiscall sub_411DD0(int this, int a2, int a3, int a4, int a5, char a6);
int __thiscall sub_411E20(int this, unsigned int a2, int a3);
int __thiscall sub_411E40(int this, int a2);
int __thiscall sub_411E60(int this, void *a2); // idb
int __cdecl sub_411EE0(int a1);
int __cdecl sub_411F20(int a1);
int __thiscall sub_411F60(int this, int *a2, char a3);
void *__stdcall sub_411FA0(unsigned int a1);
void *__stdcall sub_411FC0(void *a1);
void *__stdcall sub_411FE0(void *a1, void *a2);
int __thiscall sub_412000(int this, void *a2); // idb
int __cdecl sub_412080(int a1);
int __cdecl sub_4120C0(int a1);
signed int __cdecl sub_412100();
void *__stdcall sub_412130(unsigned int a1);
void *__stdcall sub_412150(void *a1);
int __cdecl sub_412170(int a1);
int __thiscall sub_4121B0(int this, int a2);
int __thiscall sub_412230(int this, int a2);
int __thiscall sub_4122B0(int this, int a2);
int __thiscall sub_412330(int this, unsigned int a2, int a3);
int __thiscall sub_412390(int this, int a2);
int __thiscall sub_412410(int this, int a2, int a3, int a4, int a5, char a6);
int __thiscall sub_412460(int this, int a2);
// _DWORD std___String_base___String_base(); weak
int __thiscall sub_4124F0(int this, int a2, char a3);
int __thiscall sub_412520(int this, char a2, char a3);
_DWORD __cdecl sub_4125B0(_DWORD, _DWORD); // weak
int __cdecl sub_412890(char a1, char a2, int a3);
// _DWORD __stdcall unknown_libname_9(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_412930(char a1, char a2, int a3);
int __cdecl sub_4129A0(char a1, char a2, int a3);
int __cdecl sub_412A10(int a1, int a2);
int __cdecl sub_412A50(void *a1, int a2, int a3);
int __cdecl sub_412AA0(int a1, int a2);
int __cdecl sub_412AE0(void *a1, int a2, int a3);
int __cdecl sub_412B30(int a1, int a2);
int __cdecl sub_412B70(void *a1, int a2, int a3);
int __cdecl sub_412BC0(char a1, char a2, int a3);
void *__cdecl sub_412C30(void *a1, int a2, void **a3);
char *__cdecl sub_412C80(char a1, char a2, void *Dst); // idb
int __cdecl sub_412CF0(int a1, int a2, int a3);
void *__stdcall sub_412D40(char a1, int a2, char a3, int a4, void *a5);
// _DWORD __stdcall unknown_libname_10(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_412DA0(char a1, char a2, int a3);
int __cdecl sub_412DD0(char a1, char a2, int a3);
// _DWORD __stdcall unknown_libname_11(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_412E70(char a1, char a2, int a3);
int __cdecl sub_412EA0(char a1, char a2, int a3);
void *__cdecl sub_412F10(unsigned int a1);
// _DWORD __stdcall unknown_libname_12(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_412FA0(char a1, char a2, int a3);
int __cdecl sub_412FD0(char a1, char a2, int a3);
void *__cdecl sub_413040(unsigned int a1);
int __cdecl sub_413090(int a1, int a2);
// _DWORD __stdcall unknown_libname_13(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_413100(char a1, char a2, int a3);
int __cdecl sub_413130(char a1, char a2, int a3);
// int __stdcall unknown_libname_14(char, char, void *Dst); idb
int __cdecl sub_4131D0(char a1, char a2, int a3);
void *__cdecl sub_413200(char a1, char a2, int a3);
// _DWORD __cdecl unknown_libname_15(_DWORD); weak
// _DWORD _initp_misc_winxfltr(); weak
int __cdecl sub_4132D0(void *a1, void *a2);
void *__cdecl sub_413310(unsigned int a1);
int __cdecl sub_413360(char a1, char a2, int a3);
int __cdecl sub_4133D0(void *a1, void *a2);
// _DWORD __stdcall unknown_libname_16(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_413440(char a1, char a2);
int __cdecl sub_413470(char a1, char a2, int a3);
int __cdecl sub_4134E0(void *a1, int a2, int a3);
int __cdecl sub_413530(int a1, int a2);
void *__cdecl sub_413560(unsigned int a1);
void *__cdecl sub_4135B0(unsigned int a1);
void *__cdecl sub_413610(void *a1);
void *__cdecl sub_413620(void *a1, void *a2);
void *__cdecl sub_413660(unsigned int a1);
void *__cdecl sub_4136C0(void *a1);
void *__thiscall sub_4136D0(void *this, char a2);
void *__thiscall sub_413700(void *this, char a2);
// _DWORD sub_413730(); weak
// _DWORD sub_413750(); weak
void *__thiscall sub_413770(int this, char a2, char a3, int a4);
int __cdecl sub_413820(int a1, int a2, int a3);
void *__cdecl sub_413880(char a1, char a2, void *a3);
int __cdecl sub_4138E0(int a1, int a2, int a3);
int __cdecl sub_413940(int a1, int a2, int a3);
int __cdecl sub_4139A0(int a1, int a2);
int __cdecl sub_4139D0(void *a1, int a2, int a3);
int __cdecl sub_413A90(int a1, int a2);
int __cdecl sub_413AC0(void *a1, int a2, int a3);
int __cdecl sub_413B80(int a1, int a2);
int __cdecl sub_413BB0(void *a1, int a2, int a3);
int __cdecl sub_413C70(int a1, int a2, int a3);
void *__cdecl sub_413CD0(void *a1, int a2, void **a3);
// _DWORD unknown_libname_17(); weak
char *__cdecl sub_413DA0(void *Src, int a2, void *Dst); // idb
int __cdecl sub_413DF0(int a1, int a2, int a3);
void *__cdecl sub_413E10(char a1, int a2, char a3, int a4, void *a5);
void *__cdecl sub_413E70(char a1, char a2, void *a3);
int __cdecl sub_413EC0(int a1, int a2, int a3);
int __cdecl sub_413EF0(int a1, int a2, int a3);
void *__cdecl sub_413F40(char a1, char a2, void *a3);
int __cdecl sub_413F90(int a1, int a2, int a3);
int __cdecl sub_413FC0(int a1, int a2, int a3);
void *__cdecl sub_414010(char a1, char a2, void *a3);
int __cdecl sub_414060(int a1, int a2, int a3);
int __cdecl sub_414090(int a1, int a2, int a3);
int __cdecl sub_4140E0(int a1, int a2);
void *__cdecl sub_414110(char a1, char a2, void *a3);
int __cdecl sub_414160(int a1, int a2, int a3);
int __cdecl sub_414190(int a1, int a2, int a3);
char *__cdecl sub_4141E0(char a1, char a2, void *Dst); // idb
int __cdecl sub_414230(int a1, int a2, int a3);
void *__cdecl sub_414260(void *Src, int a2, int a3); // idb
int __cdecl sub_4142B0(void *a1, void *a2);
int __cdecl sub_4142E0(int a1, int a2, int a3);
int __cdecl sub_414340(void *a1, void *a2);
int __cdecl sub_414370(char a1, char a2, int a3);
int __cdecl sub_4143C0(int a1, int a2);
int __cdecl sub_4143F0(int a1, int a2, int a3);
int __cdecl sub_414450(void *a1, int a2, int a3);
int __thiscall sub_414510(int this, int a2);
int __stdcall sub_414540(void *a1, int a2);
void *__stdcall sub_414560(int a1);
int __stdcall sub_414580(void *a1, int a2);
void *__stdcall sub_4145A0(int a1);
int __stdcall sub_4145C0(void *a1, int a2);
void *__stdcall sub_4145E0(int a1);
void *__stdcall sub_414600(void *a1, void **a2);
int __stdcall sub_414620(void *a1, int a2);
void *__stdcall sub_414640(void *a1);
void *__stdcall sub_414660(void *a1);
int __cdecl sub_414680(int a1, int a2, int a3);
void *__cdecl sub_4146C0(int a1, int a2, void *a3);
int __cdecl sub_414780(int a1, int a2, int a3);
int __cdecl sub_4147C0(int a1, int a2, int a3);
int __cdecl sub_414800(int a1, int a2, int a3);
int __cdecl sub_414830(int a1, int a2, int a3);
void *__cdecl sub_414870(char a1, char a2, void *a3);
int __cdecl sub_414890(int a1, int a2, int a3);
void *__cdecl sub_4148F0(char a1, char a2, void *a3);
int __cdecl sub_414910(int a1, int a2, int a3);
void *__cdecl sub_414970(char a1, char a2, void *a3);
int __cdecl sub_414990(int a1, int a2, int a3);
void *__cdecl sub_4149F0(char a1, char a2, void *a3);
int __cdecl sub_414A10(int a1, int a2, int a3);
char *__cdecl sub_414A70(char a1, char a2, void *Dst); // idb
void *__cdecl sub_414A90(void *Src, int a2, int a3); // idb
int __cdecl sub_414AE0(int a1);
int __cdecl sub_414AF0(int a1, int a2, int a3);
int __cdecl sub_414B30(int a1, int a2, int a3);
int __cdecl sub_414C30(int a1, int a2, int a3);
int __cdecl sub_414C70(void *a1, int a2);
void *__cdecl sub_414CF0(int a1);
int __cdecl sub_414D00(void *a1, int a2);
void *__cdecl sub_414D80(int a1);
int __cdecl sub_414D90(void *a1, int a2);
void *__cdecl sub_414E10(int a1);
void *__cdecl sub_414E20(void *a1, void **a2);
int __cdecl sub_414E60(void *a1, int a2);
void *__cdecl sub_414EE0(void *a1);
void *__cdecl sub_414EF0(void *a1);
void *__thiscall sub_414F00(int this, char a2);
void *__thiscall sub_414F30(int this, char a2);
void *__thiscall sub_414F60(int this, char a2);
void *__thiscall sub_414F90(void *this, char a2);
void *__thiscall sub_414FC0(void *this, char a2);
int __cdecl call_naticq_event();
int __cdecl sub_415010(int a1, int a2, int a3);
// _DWORD __cdecl unknown_libname_18(_DWORD); weak
int __cdecl sub_415040(int a1, int a2, int a3);
int __cdecl sub_415080();
int __cdecl sub_415090(int a1, int a2, int a3);
void *__cdecl sub_4150C0(char a1, char a2, void *a3);
int __cdecl sub_415120(int a1, int a2, int a3);
void *__cdecl sub_415160(char a1, char a2, void *a3);
int __cdecl sub_4151C0(int a1, int a2, int a3);
void *__cdecl sub_4151F0(char a1, char a2, void *a3);
int __cdecl sub_415250(int a1, int a2, int a3);
char *__cdecl sub_415280(char a1, char a2, void *Dst); // idb
int __cdecl sub_4152E0(int a1, int a2);
// _DWORD sub_415300(); weak
int __cdecl sub_415320(int a1, int a2, int a3);
void *__cdecl sub_415350(int a1, int a2, void *a3);
void *__cdecl sub_415420(int a1, int a2, void *a3);
void *__cdecl sub_4154E0(void **a1, void **a2, void *a3);
char *__cdecl sub_4155A0(void *Src, int a2, void *Dst); // idb
char *__cdecl strstr_my(char *a1, char *a2); // idb
char __fastcall sub_415610(int a1);
void __cdecl ig11_mutex_toggle(unsigned __int16 a1);
void __cdecl ig11_mutex_create(unsigned __int16 a1);
void __cdecl ig11_mutex_destroy(unsigned __int16 a1);
int __fastcall sub_415690(int a1);
int __fastcall sub_415700(int a1);
void *__thiscall sub_415760(int this, char a2);
int __thiscall sub_415790(int this, int a2);
int __fastcall sub_4157C0(int a1);
int __thiscall sub_4157E0(int this, unsigned int a2);
int __thiscall sub_415810(int this, int a2);
int __thiscall sub_415890(int this, int a2, int a3, unsigned int a4);
int __thiscall sub_415900(int this, int a2, int a3);
int __thiscall sub_415930(int this, int a2, int a3);
int __thiscall sub_415970(int this, int a2);
int __fastcall sub_4159D0(int a1);
int __thiscall sub_415A10(int this, int a2);
int __thiscall sub_415A40(int this, int a2, int a3, unsigned int a4);
int __thiscall sub_415A60(int this, int a2, int a3, int a4, int a5);
int __stdcall sub_415AE0(void *a1, int a2, int a3);
int __thiscall sub_415B20(int this, unsigned int a2, int a3);
int __thiscall sub_415B40(int this, int a2);
void *__thiscall sub_415B60(int this, int a2, int a3, int a4, int a5);
int __thiscall sub_415FA0(int this, unsigned int a2, int a3);
int __thiscall sub_415FF0(int this, int a2);
int __thiscall sub_416070(int this, int a2);
int __thiscall sub_4160C0(int this, int a2);
int __cdecl sub_4160F0(char a1, char a2, int a3);
int __cdecl sub_416160(void *a1, int a2, int a3);
// _DWORD __stdcall unknown_libname_19(_DWORD, _DWORD, _DWORD); weak
int __cdecl sub_4161E0(char a1, char a2, int a3);
int __cdecl sub_416210(char a1, char a2, int a3);
int __cdecl sub_416280(int a1, int a2, int a3);
int __cdecl sub_4162E0(void *a1, int a2, int a3);
void *__cdecl sub_4163A0(char a1, char a2, void *a3);
int __cdecl sub_4163F0(int a1, int a2, int a3);
int __cdecl sub_416420(int a1, int a2, int a3);
int __thiscall sub_416470(int this, int a2);
int __stdcall sub_4164A0(void *a1, int a2);
int __cdecl sub_4164C0(int a1, int a2, int a3);
void *__cdecl sub_416500(char a1, char a2, void *a3);
int __cdecl sub_416520(int a1, int a2, int a3);
int __cdecl sub_416580(void *a1, int a2);
void *__cdecl sub_416600(char a1, char a2, void *a3);
int __cdecl sub_416660(int a1, int a2, int a3);
void *__cdecl sub_416690(int a1, int a2, void *a3);
// int __stdcall send(SOCKET s, const char *p->pkt.uin, int len, int flags); idb
// int __stdcall _WSAFDIsSet(SOCKET, fd_set *); idb
// int __stdcall recv(SOCKET s, char *p->pkt.uin, int len, int flags); idb
// u_short __stdcall ntohs(u_short netshort); idb
// u_short __stdcall htons(u_short hostshort); idb
// int __stdcall select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout); idb
// u_long __stdcall htonl(u_long hostlong); idb
// int __stdcall ioctlsocket(SOCKET s, __int32 cmd, u_long *argp); idb
// int __stdcall closesocket(SOCKET s); idb
// SOCKET __stdcall socket(int af, int type, int protocol); idb
// int __stdcall WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); idb
// SOCKET __stdcall accept(SOCKET s, struct sockaddr *addr, int *addrlen); idb
// int __stdcall listen(SOCKET s, int backlog); idb
// int __stdcall bind(SOCKET s, const struct sockaddr *name, int namelen); idb
// int __stdcall setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen); idb
// int __stdcall shutdown(SOCKET s, int how); idb
// int __stdcall WSAGetLastError(); idb
// char *__stdcall inet_ntoa(struct in_addr in); idb
// int __stdcall getpeername(SOCKET s, struct sockaddr *name, int *namelen); idb
// BOOL __usercall sub_4167BC<eax>(int a1<eax>, int a2<edx>, int a3<ecx>, int a4<ebx>, int a5<edi>, int a6<esi>, char a7);
// void *__cdecl memcpy(void *, const void *, size_t); idb
// int __cdecl memcmp(const void *, const void *, size_t); idb
// void *__cdecl memset(void *, int, size_t); idb
// void __cdecl operator delete(void *); idb
// void *__cdecl operator new(unsigned int); idb
// size_t __cdecl strlen(const char *); idb
// char *__cdecl strcpy(char *, const char *); idb
// _onexit_t __cdecl _onexit(_onexit_t Func); idb
int __cdecl sub_4168F3(_onexit_t Func); // idb
// int __cdecl strcmp(const char *, const char *); idb
// BOOL __usercall sub_416BBC<eax>(int a1<eax>, int a2<edx>, int a3<ecx>, int a4<ebx>, int a5<edi>, int a6<esi>, char a7);
// void __stdcall __ArrayUnwind(void *, unsigned int, int, void (__thiscall *)(void *)); idb
// void __usercall sub_416D71(int a1<ebp>);
int __cdecl sub_416DF5(int a1, int a2, int a3, int a4);
int __stdcall sub_416E1A(int a1);
int (*__cdecl sub_416E70())(void);
bool __cdecl sub_416ED0(int a1);
int __cdecl sub_416F10(int a1, unsigned int a2);
// unsigned int __usercall sub_416F60<eax>(int a1<eax>, int a2);
errno_t __cdecl sub_41702A();
int __cdecl sub_417055();
unsigned __int32 __cdecl sub_417058();
// int __cdecl crt_debugger_hook(_DWORD); weak
// void __cdecl terminate(); idb
// int __cdecl except_handler4_common(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __cdecl invoke_watson(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// errno_t __cdecl controlfp_s(unsigned int *CurrentState, unsigned int NewValue, unsigned int Mask); idb
void __cdecl status_update();
__time64_t __cdecl sub_417290(__time64_t *Time); // idb
int __thiscall sub_4172B0(int this, unsigned int a2, int a3);
char __thiscall sub_417360(int this, int a2);
int __thiscall sub_417460(int this, int a2);
char *__cdecl sub_4174F0(char *a1, __int16 a2); // idb
signed int __cdecl recv_packet(SOCKET s, char *p->pkt.uin, int a3); // idb
__int16 __thiscall send_packet(int this, char *p->pkt.uin); // idb
int __thiscall onAuthReply(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16);
int __thiscall sub_417A70(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15);
signed int __cdecl sub_417B50(signed int a1);
signed int __cdecl sub_417C00(unsigned int a1);
__time64_t __cdecl gettime(__time64_t *Time); // idb
int __thiscall sub_417C90(int this, unsigned __int16 a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9);
int __thiscall send_server_ack(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9);
int __thiscall send_client_ack(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9);
int __thiscall sub_417EF0(int this, char a2, _DWORD a3, _DWORD a4, _DWORD a5, _DWORD a6, _DWORD a7, _DWORD a8, _DWORD a9, char a10, char a11, char a12);
signed int __cdecl sub_417FD0(int a1, signed int *a2);
int __cdecl sub_418050(int a1, int a2, int a3);
int __thiscall sub_4181A0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, char a17, int a18, int a19, int a20, int a21, int a22, int a23);
// int __userpurge sub_4182C0<eax>(int a1<ecx>, int a2<esi>, char a3, int a4, char a5, char a6, int a7, int a8, int a9, int a10, int a11, int a12, char a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, unsigned int a22, int a23, int a24, int a25, int a26);
int __stdcall handle_connection(SOCKET *a1);
int __cdecl main(int argc, const char **argv, const char *envp); // idb
int __cdecl sub_41A800(int a1, char a2);
signed int __thiscall sub_41A8E0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, u_short a9);
int __fastcall sub_41AA60(int a1);
__time64_t __cdecl sub_41AB10(__time64_t *Time); // idb
__time64_t __cdecl sub_41AB30(struct tm *Tm); // idb
signed int __thiscall sub_41AB50(int this, unsigned __int16 a2);
signed int __thiscall sub_41ABB0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
signed int __thiscall sub_41AC70(int this, unsigned __int16 a2);
signed int __thiscall sub_41ACD0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
char __thiscall sub_41AD90(int this, int a2, int a3);
char __thiscall sub_41AE30(int this, int a2);
char __thiscall sub_41AEF0(int this, int a2);
unsigned __int16 __fastcall sub_41AFB0(int a1);
int __thiscall sub_41B210(int this, int a2, int a3);
int __thiscall sub_41B7A0(int this, int a2, int a3);
int __thiscall sub_41BB70(int this, int a2, int a3);
int __thiscall sub_41BC50(int this, int a2, int a3);
int __thiscall sub_41C350(int this, int a2, int a3);
unsigned int __thiscall sub_41C4B0(int this, int a2, int a3);
unsigned int __thiscall sub_41C9E0(int this, int a2, int a3);
char __thiscall sub_41D270(int this, int a2);
char __thiscall sub_41D390(int this, void *a2, int a3, int a4); // idb
char __thiscall sub_41D640(int this, int a2, int a3, int a4, int a5, int a6);
char __thiscall sub_41D810(int this, int a2, int a3);
char __thiscall sub_41D880(int this, int a2, int a3);
char __thiscall sub_41D900(int this, int a2, int a3, int a4, int a5);
char __thiscall sub_41DA00(int this, int a2, int a3, int a4);
char __thiscall sub_41DAF0(int this, int a2, void *a3, int a4); // idb
unsigned int __thiscall sub_41DB90(int this, int a2, int a3);
signed int __fastcall sub_41DDD0(int a1);
char __fastcall sub_41DEC0(int a1);
char __thiscall sub_41DF60(int this, int a2, int a3, int a4, int a5);
signed int __thiscall sub_41E760(int this, __int16 a2, __int16 a3, int a4, int a5);
char __fastcall sub_41E910(int a1);
bool __fastcall sub_41F310(int a1);
bool __thiscall sub_41F340(int this, int a2);
bool __thiscall sub_41F370(int this, int a2);
bool __thiscall sub_41F3A0(int this, int a2);
char __fastcall sub_41F3D0(int a1);
bool __thiscall sub_41F5D0(int this, int a2);
bool __thiscall sub_41F600(int this, int a2);
char __fastcall sub_41F630(int a1);
bool __thiscall sub_41FA10(int this, int a2);
bool __thiscall sub_41FA40(int this, int a2);
char __fastcall sub_41FA70(int a1);
bool __thiscall sub_41FB70(int this, int a2);
char __fastcall sub_41FBA0(int a1);
char __thiscall sub_420110(int this, int a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16);
int __thiscall sub_4201B0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, void *a9); // idb
bool __fastcall sub_420800(int a1);
bool __fastcall sub_420830(int a1);
char __thiscall sub_420860(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int *a9);
char __thiscall sub_4209E0(int this, char a2, int a3);
char __thiscall sub_420B30(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, void *a9, char a10); // idb
char __thiscall sub_420FD0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15);
char __thiscall sub_421160(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16);
char __thiscall sub_421310(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16);
char __thiscall sub_4213C0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15);
int __fastcall sub_421470(int a1);
char __fastcall sub_421810(int a1);
char __thiscall sub_421840(int this, int a2);
char __thiscall sub_421C50(int this, int a2);
char __thiscall sub_421EB0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
int __fastcall sub_421F30(int a1);
char __thiscall sub_422190(int this, unsigned __int16 a2, int a3);
char __thiscall sub_422490(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, __int16 a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31, int a32, int a33, int a34, int a35, int a36, int a37, int a38, int a39, int a40, int a41, int a42, int a43, int a44, int a45, int a46, int a47, int a48, int a49, int a50, int a51, int a52, int a53, int a54, int a55, int a56, int a57, int a58, int a59, int a60, int a61, int a62, int a63);
char __thiscall sub_422650(int this, int a2);
char __thiscall sub_4228D0(int this, int a2);
signed int __thiscall sub_422C50(int this, int a2);
char __thiscall sub_423100(int this, int a2);
char __thiscall sub_423200(int this, int a2, int a3, int a4);
char __fastcall sub_4235D0(int a1);
char __thiscall sub_423AC0(int this, int a2, char a3);
char __thiscall sub_423D60(int this, int a2);
char __thiscall sub_423DF0(int this, int a2);
char __thiscall sub_423E80(int this, int a2);
char __thiscall sub_423F70(int this, int a2);
char __thiscall sub_424000(int this, int a2);
char __thiscall sub_424090(int this, int a2);
char __thiscall sub_424130(int this, int a2);
char __fastcall sub_4243C0(int a1);
char __fastcall sub_4245A0(int a1);
char __thiscall sub_424730(int this, int a2);
int __thiscall sub_424780(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
char __thiscall sub_424B60(int this, void *a2, int a3); // idb
char __thiscall sub_424C60(int this, int a2, int a3);
char __thiscall sub_424FE0(int this, int a2);
char __fastcall sub_425000(int a1);
char __thiscall sub_425150(int this, int a2);
char __thiscall sub_425BD0(int this, char a2);
_DWORD __stdcall sub_425E20(char, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); // weak
char __thiscall sub_425FE0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23);
char __thiscall sub_426480(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, unsigned __int8 a10);
char __thiscall sub_4265F0(int this, char a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9, int a10, int a11, char a12, int a13, int a14, int a15, int a16, int a17, int a18, char a19, char a20, signed int a21, __int16 a22, int a23, int a24, int a25, char a26);
char __thiscall sub_426B90(int this, int a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9, u_short a10, int a11, unsigned __int8 a12);
char __thiscall sub_4276F0(int this, int a2);
char __thiscall sub_427B20(int this, void *a2, int a3); // idb
char __thiscall sub_428560(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16);
char __thiscall sub_428980(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9);
char __thiscall sub_428BB0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23);
signed int __thiscall pollIncomingEvents(int this, int a2);
char __thiscall sub_42A260(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16);
// _DWORD std___Init_locks____Init_locks(); weak
// _DWORD _LocaleUpdate__GetLocaleT(); weak
int __fastcall sub_42A590(int a1);
_DWORD sub_42A5B0(); // weak
char __fastcall sub_42A5E0(int a1);
char __fastcall sub_42AA40(int a1);
int __fastcall sub_42AF60(int a1);
_DWORD sub_42B020(); // weak
int __fastcall sub_42B110(int a1);
int __fastcall sub_42B130(int a1);
int __fastcall sub_42B150(int a1);
_DWORD sub_42B170(); // weak
char __thiscall sub_42B1A0(void *this, int a2, unsigned int a3);
char __thiscall sub_42B320(void *this, int a2);
int __fastcall sub_42B490(int a1);
int __fastcall sub_42B4B0(int a1);
char __thiscall sub_42B4D0(void *this, int a2, unsigned int a3);
int __thiscall sub_42BB80(int this, unsigned __int16 a2);
char __thiscall sub_42BBE0(int this, int a2);
char __thiscall sub_42BC20(int this, int a2);
char __thiscall sub_42BC70(int this, int a2);
int __fastcall sub_42BCD0(int a1);
// _DWORD naticq_event(); weak
int __fastcall sub_42BD10(int a1);
char __thiscall sub_42BD30(void *this, int a2);
char __thiscall sub_42BF30(int this, int a2, unsigned int a3);
int __fastcall sub_42C060(int a1);
int __fastcall sub_42C080(int a1);
char __thiscall sub_42C0A0(int this, SOCKET s); // idb
int __fastcall sub_42C1E0(int a1);
int __thiscall sub_42C200(int this, int a2, unsigned int a3);
int __fastcall sub_42C3B0(int a1);
int __fastcall sub_42C3E0(int a1);
void *__thiscall sub_42C440(void *this, int a2, unsigned int a3);
void *__thiscall sub_42CB30(int this, int a2, unsigned int a3);
int __fastcall sub_42CC40(int a1);
int __fastcall sub_42CC70(int a1);
int __fastcall sub_42CCE0(int a1);
int __fastcall sub_42CD00(int a1);
void *__thiscall sub_42CD30(u_short *this, int a2, unsigned int a3);
char __thiscall sub_42CE20(int this, int a2, unsigned int a3);
int __thiscall sub_42CF40(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8);
void *__thiscall sub_42CFD0(int this, u_long hostlong); // idb
void *__thiscall sub_42D020(int this, u_short a2);
void *__thiscall sub_42D070(int this, int a2, unsigned int a3);
char __thiscall sub_42D1C0(void *this, int a2, unsigned int a3);
char __thiscall sub_42D310(int this, SOCKET s); // idb
int __fastcall sub_42D950(int a1);
int __fastcall sub_42D970(int a1);
int __thiscall sub_42D990(int this, int a2, unsigned int a3);
int __fastcall sub_42DC90(int a1);
int __fastcall sub_42DCB0(int a1);
int __fastcall sub_42DCD0(int a1);
int __fastcall sub_42DCF0(int a1);
int __thiscall sub_42DD10(int this, int a2, unsigned int a3);
int __fastcall sub_42DD90(int a1);
int __fastcall sub_42DDB0(int a1);
int __fastcall sub_42DDD0(int a1);
int __thiscall sub_42DDF0(int this, int a2, unsigned int a3);
int __thiscall sub_42DE70(int this, int a2, unsigned int a3);
int __thiscall sub_42DEC0(int this, int a2, unsigned int a3);
int __thiscall sub_42DEE0(int this, int a2, unsigned int a3);
char __thiscall sub_42DF60(void *this, int a2, unsigned int a3);
int __thiscall sub_42E270(int this, int a2);
int __thiscall sub_42E510(int this, int a2);
char __thiscall sub_42E720(int this, int a2, unsigned int a3);
char __thiscall sub_42E800(int this, int a2, unsigned int a3);
char __thiscall sub_42E8E0(int this, int a2, unsigned int a3);
int __thiscall sub_42EA90(int this, int a2);
char __thiscall sub_42EB40(void *this, int a2);
char __thiscall sub_42ED90(int this, int a2, unsigned int a3);
char __thiscall sub_42EEF0(int this, int a2, unsigned int a3);
char __thiscall sub_42EF10(int this, int a2, unsigned int a3);
char __thiscall sub_42EF80(int this, int a2);
unsigned int __thiscall sub_42F180(int this, int a2, int a3);
// _DWORD _LocaleUpdate__GetLocaleT(); weak
// int __stdcall CxxThrowException(_DWORD, _DWORD); weak
int __cdecl sub_431D60();
int __cdecl sub_431D70();
// void __stdcall Sleep(DWORD dwMilliseconds); idb
// void __stdcall InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); idb
// DWORD __stdcall GetTickCount(); idb
// void __stdcall EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection); idb
// void __stdcall DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection); idb
// BOOL __stdcall TerminateProcess(HANDLE hProcess, UINT uExitCode); idb
// void __stdcall GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime); idb
// DWORD __stdcall GetCurrentProcessId(); idb
// DWORD __stdcall GetCurrentThreadId(); idb
// BOOL __stdcall QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount); idb
// BOOL __stdcall IsDebuggerPresent(); idb
// LPTOP_LEVEL_EXCEPTION_FILTER __stdcall SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter); idb
// LONG __stdcall UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo); idb
// HANDLE __stdcall GetCurrentProcess(); idb
// DWORD __stdcall GetLastError(); idb
// int __cdecl std__char_traits_char___eq_int_type(_DWORD, _DWORD); weak
// int __cdecl std__char_traits_char___length(_DWORD); weak
// int std__char_traits_char___eof(void); weak
// int __thiscall std__ios_base__good(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____size(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(_DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(_DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(_DWORD, _DWORD); weak
// int __cdecl std__operator___char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____reserve(_DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____replace(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____append(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char_____Tidy(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std___String_val_char_std__allocator_char_____String_val_char_std__allocator_char__(_DWORD); weak
// int __thiscall std__allocator_char___allocator_char_(_DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____find(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____empty(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____length(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____data(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____end(_DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____begin(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____assign(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(_DWORD); weak
// int __cdecl std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(_DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __cdecl std__operator___char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD); weak
// int __cdecl std__operator___char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD); weak
// int __cdecl std__operator___char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD); weak
// int __cdecl std__operator___char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD); weak
// int __cdecl std__operator__char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD, _DWORD); weak
// int std__uncaught_exception(void); weak
// int __cdecl std__operator__char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____swap(_DWORD, _DWORD); weak
// int __thiscall std__basic_streamp->pkt.uin_char_std__char_traits_char____sputn(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_ostream_char_std__char_traits_char_____Osfx(_DWORD); weak
// int __thiscall std__basic_ios_char_std__char_traits_char____tie(_DWORD); weak
// int __thiscall std__basic_streamp->pkt.uin_char_std__char_traits_char_____Lock(_DWORD); weak
// int __thiscall std__basic_ios_char_std__char_traits_char____fill(_DWORD); weak
// int __thiscall std__basic_streamp->pkt.uin_char_std__char_traits_char_____Unlock(_DWORD); weak
// int __thiscall std__basic_streamp->pkt.uin_char_std__char_traits_char____sputc(_DWORD, _DWORD); weak
// int __thiscall std__basic_ostringstream_char_std__char_traits_char__std__allocator_char____str(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_ostringstream_char_std__char_traits_char__std__allocator_char____basic_ostringstream_char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_ostream_char_std__char_traits_char____flush(_DWORD); weak
// int __thiscall std__basic_ostream_char_std__char_traits_char____operator__(_DWORD, _DWORD); weak
// int __thiscall std__basic_ostream_char_std__char_traits_char____operator__(_DWORD, _DWORD, _DWORD); weak
// int __fastcall std__basic_ios_char_std__char_traits_char____rdp->pkt.uin(_DWORD, _DWORD); weak
// int __thiscall std__basic_ios_char_std__char_traits_char____setstate(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____find_last_of(_DWORD, _DWORD, _DWORD); weak
// int __fastcall std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____erase(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____assign(_DWORD, _DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(_DWORD, _DWORD, _DWORD); weak
// int __thiscall std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vbase_destructor(_DWORD); weak
// int __thiscall std__ios_base__width(_DWORD, _DWORD); weak
// int __thiscall std__ios_base__width(_DWORD); weak
// int __thiscall std__ios_base__flags(_DWORD); weak
// void __cdecl tzset(); idb
// errno_t __cdecl memmove_s(void *Dst, rsize_t DstSize, const void *Src, rsize_t MaxCount); idb
// int std__exception__exception(void); weak
// int __stdcall std__exception__exception(_DWORD); weak
// int __stdcall std__exception__exception(_DWORD); weak
// int __cdecl atoi(const char *); idb
// int __fastcall invalid_parameter_noinfo(_DWORD, _DWORD); weak
// __time64_t __cdecl mktime64(struct tm *Tm); idb
// int __cdecl rand(); idb
// void __cdecl srand(unsigned int); idb
// __int32 __cdecl atol(const char *); idb
// __time64_t __cdecl time64(__time64_t *Time); idb
// int sprintf(char *, const char *, ...); idb
// void *__cdecl memmove(void *, const void *, size_t); idb
// void __cdecl free(void *); idb
// void *__cdecl malloc(size_t); idb
// char *__cdecl strstr(const char *, const char *); idb
// int snprintf(char *, size_t, const char *, ...); idb
// int __cdecl beginthreadex(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); weak
// int printf(const char *, ...); idb
// FILE *__cdecl fopen(const char *, const char *); idb
// size_t __cdecl fread(void *, size_t, size_t, FILE *); idb
// size_t __cdecl fwrite(const void *, size_t, size_t, FILE *); idb
// __int32 __cdecl ftell(FILE *); idb
// int __cdecl fseek(FILE *, __int32, int); idb
// int __cdecl fclose(FILE *); idb
// int __thiscall std__exception___exception(_DWORD); weak
// int __stdcall connect(SOCKET s, const struct sockaddr *name, int namelen); idb
// int __stdcall WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); idb
// SOCKET __stdcall socket(int af, int type, int protocol); idb
// int __stdcall closesocket(SOCKET s); idb
// struct hostent *__stdcall gethostbyname(const char *name); idb
// int __stdcall ioctlsocket(SOCKET s, __int32 cmd, u_long *argp); idb
// u_long __stdcall ntohl(u_long netlong); idb
// u_long __stdcall htonl(u_long hostlong); idb
// int __stdcall select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout); idb
// u_short __stdcall htons(u_short hostshort); idb
// u_short __stdcall ntohs(u_short netshort); idb
// int __stdcall recv(SOCKET s, char *p->pkt.uin, int len, int flags); idb
// int __stdcall send(SOCKET s, const char *p->pkt.uin, int len, int flags); idb


//----- (00401060) --------------------------------------------------------
int __thiscall sub_401060(int this, int a2)
{
  int result; // eax@1
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  result = this;
  *(_DWORD *)this = *(_DWORD *)a2;
  return result;
}

//----- (00401080) --------------------------------------------------------
int __fastcall sub_401080(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)a1 )
    v3 = unknown_libname_1();
  else
    v3 = 0;
  return v3;
}

//----- (004010B0) --------------------------------------------------------
bool __thiscall sub_4010B0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  return *(_DWORD *)this == *(_DWORD *)a2;
}

//----- (004010D0) --------------------------------------------------------
char __fastcall sub_4010D0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return *(_DWORD *)a1 != 0;
}

//----- (004010F0) --------------------------------------------------------
int __thiscall sub_4010F0(int this, char a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  std__exception__exception(&a2);
  *(_DWORD *)v3 = &off_433158;
  return v3;
}

//----- (00401120) --------------------------------------------------------
int __fastcall sub_401120(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_433158;
  return std__exception___exception(v2);
}

//----- (00401140) --------------------------------------------------------
void *__thiscall sub_401140(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_401120(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00401180) --------------------------------------------------------
int __thiscall sub_401180(int this, int a2)
{
  int v3; // [sp+4h] [bp-10h]@1

  v3 = this;
  std__exception__exception();
  *(_DWORD *)v3 = &off_433164;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  return v3;
}

//----- (004011F0) --------------------------------------------------------
int __fastcall sub_4011F0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_433164;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 12);
  return std__exception___exception(v2);
}

//----- (00401220) --------------------------------------------------------
int __fastcall sub_401220(int a1)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(a1 + 12);
}

//----- (00401240) --------------------------------------------------------
void *__thiscall sub_401240(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_4011F0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00401270) --------------------------------------------------------
int __thiscall sub_401270(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_401180(this, a2);
  *(_DWORD *)v3 = &off_433170;
  return v3;
}

//----- (004012A0) --------------------------------------------------------
int __fastcall sub_4012A0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_433170;
  return sub_4011F0(v2);
}

//----- (004012C0) --------------------------------------------------------
void *__thiscall sub_4012C0(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_4012A0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (004012F0) --------------------------------------------------------
int __thiscall sub_4012F0(int this, int a2)
{
  int v3; // [sp+4h] [bp-10h]@1

  v3 = this;
  std__exception__exception(a2);
  *(_DWORD *)v3 = &off_433164;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 12);
  return v3;
}

//----- (00401370) --------------------------------------------------------
int __thiscall sub_401370(int this, u_short a2, __int16 a3)
{
  int v4; // [sp+4h] [bp-10h]@1

  v4 = this;
  sub_401700(this + 4);
  sub_42D020(v4, a2);
  *(_WORD *)v4 = a3;
  return v4;
}

//----- (004013E0) --------------------------------------------------------
int __thiscall sub_4013E0(int this, u_long hostlong, __int16 a3)
{
  int v4; // [sp+4h] [bp-10h]@1

  v4 = this;
  sub_401700(this + 4);
  sub_42CFD0(v4, hostlong);
  *(_WORD *)v4 = a3;
  return v4;
}

//----- (00401450) --------------------------------------------------------
int __thiscall sub_401450(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, __int16 a9)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  char v16; // ST00_1@1
  int v17; // [sp+8h] [bp-18h]@1
  signed int v18; // [sp+1Ch] [bp-4h]@1
  int *v19; // [sp+Ch] [bp-14h]@1
  int v20; // [sp+4h] [bp-1Ch]@1

  v17 = this;
  v18 = 0;
  sub_401700(this + 4);
  LOBYTE(v18) = 1;
  v19 = &ST04_4_0;
  v20 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  sub_42CF40(v17, v16, ST04_4_0, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0);
  *(_WORD *)v17 = a9;
  v18 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return v17;
}

//----- (004014E0) --------------------------------------------------------
int __thiscall sub_4014E0(int this, int a2, __int16 a3)
{
  int v4; // [sp+4h] [bp-10h]@1

  v4 = this;
  sub_401700(this + 4);
  sub_401810(v4 + 4, a2);
  *(_WORD *)v4 = a3;
  return v4;
}

//----- (00401550) --------------------------------------------------------
int __thiscall sub_401550(int this, int a2, int a3, __int16 a4)
{
  int v5; // [sp+4h] [bp-10h]@1
  int v6; // [sp+10h] [bp-4h]@1

  v5 = this;
  sub_401700(this + 4);
  v6 = 0;
  if ( a3 && a2 )
    sub_403B10(v5 + 4, a2, (_BYTE)a3 + (_BYTE)a2);
  else
    sub_401A00(v5 + 4);
  *(_WORD *)v5 = a4;
  return v5;
}

//----- (004015E0) --------------------------------------------------------
void *__thiscall sub_4015E0(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42CCE0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00401610) --------------------------------------------------------
void *__thiscall sub_401610(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42DDB0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00401640) --------------------------------------------------------
void *__thiscall sub_401640(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42DD90(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00401670) --------------------------------------------------------
void *__thiscall sub_401670(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42CC40(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (004016A0) --------------------------------------------------------
void *__thiscall sub_4016A0(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42DCD0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (004016D0) --------------------------------------------------------
void *__thiscall sub_4016D0(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42DC90(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00401700) --------------------------------------------------------
int __fastcall sub_401700(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_402180(v3, 0);
  return v3;
}

//----- (00401770) --------------------------------------------------------
int __thiscall sub_401770(int this, unsigned int a2)
{
  char v3; // ST04_1@1
  int v4; // [sp+4h] [bp-18h]@1
  char *v5; // [sp+Ch] [bp-10h]@1
  int v6; // [sp+18h] [bp-4h]@1
  char v7; // [sp+Bh] [bp-11h]@1

  v4 = this;
  v3 = this;
  v5 = &v3;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v4, v3);
  v6 = 0;
  v7 = 0;
  sub_401F40(v4, a2, (int)&v7);
  return v4;
}

//----- (004017F0) --------------------------------------------------------
int __fastcall sub_4017F0(int a1)
{
  void **v2; // [sp+0h] [bp-4h]@1

  v2 = (void **)a1;
  sub_402230(a1);
  return sub_401F20(v2);
}

//----- (00401810) --------------------------------------------------------
int __thiscall sub_401810(int this, int a2)
{
  int v3; // esi@4
  int v4; // eax@5
  int v5; // esi@6
  int v6; // eax@10
  int v7; // [sp+4h] [bp-Ch]@1
  int v8; // [sp+Ch] [bp-4h]@5
  int v9; // [sp+8h] [bp-8h]@7

  v7 = this;
  if ( this != a2 )
  {
    if ( sub_4019B0(a2) )
    {
      v3 = sub_4019B0(a2);
      if ( v3 > (unsigned int)sub_4019B0(v7) )
      {
        v5 = sub_4019B0(a2);
        if ( v5 > (unsigned int)sub_401FE0(v7) )
        {
          if ( *(_DWORD *)(v7 + 12) )
          {
            sub_402200(*(_DWORD *)(v7 + 12), *(_DWORD *)(v7 + 16));
            unknown_libname_2(*(void **)(v7 + 12), *(_DWORD *)(v7 + 20) - *(_DWORD *)(v7 + 12));
          }
          v6 = sub_4019B0(a2);
          if ( sub_402180(v7, v6) )
            *(_DWORD *)(v7 + 16) = unknown_libname_7(*(_DWORD *)(a2 + 12), *(_DWORD *)(a2 + 16), *(void **)(v7 + 12));
        }
        else
        {
          v9 = *(_DWORD *)(a2 + 12) + sub_4019B0(v7);
          sub_403C10(*(_DWORD *)(a2 + 12), v9, *(void **)(v7 + 12));
          *(_DWORD *)(v7 + 16) = unknown_libname_7(v9, *(_DWORD *)(a2 + 16), *(void **)(v7 + 16));
        }
      }
      else
      {
        v4 = (int)sub_403C10(*(_DWORD *)(a2 + 12), *(_DWORD *)(a2 + 16), *(void **)(v7 + 12));
        v8 = v4;
        sub_402200(v4, *(_DWORD *)(v7 + 16));
        *(_DWORD *)(v7 + 16) = *(_DWORD *)(v7 + 12) + sub_4019B0(a2);
      }
    }
    else
    {
      sub_401A00(v7);
    }
  }
  return v7;
}

//----- (00401990) --------------------------------------------------------
void *__thiscall sub_401990(int this, unsigned int a2)
{
  return sub_402020(this, a2, 0);
}

//----- (004019B0) --------------------------------------------------------
int __fastcall sub_4019B0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return *(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12);
}

//----- (004019D0) --------------------------------------------------------
int __thiscall sub_4019D0(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_4019B0(this) )
    invalid_parameter_noinfo(v3, v2);
  return a2 + *(_DWORD *)(v5 + 12);
}

//----- (00401A00) --------------------------------------------------------
int __fastcall sub_401A00(int a1)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // eax@1
  unsigned int v5; // edx@1
  int v6; // [sp+0h] [bp-2Ch]@1
  char v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+24h] [bp-8h]@1
  unsigned int v9; // [sp+28h] [bp-4h]@1
  char v10; // [sp+Ch] [bp-20h]@1
  int v11; // [sp+14h] [bp-18h]@1
  unsigned int v12; // [sp+18h] [bp-14h]@1
  char v13; // [sp+4h] [bp-28h]@1

  v6 = a1;
  v2 = sub_40EB60(a1, (int)&v7);
  v3 = *(_DWORD *)(v2 + 4);
  v8 = *(_DWORD *)v2;
  v9 = v3;
  v4 = sub_402FA0(v6, (int)&v10);
  v5 = *(_DWORD *)(v4 + 4);
  v11 = *(_DWORD *)v4;
  v12 = v5;
  return sub_4020E0(v6, (int)&v13, v11, v5, v8, v9);
}

//----- (00401A60) --------------------------------------------------------
int __fastcall sub_401A60(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_402400(v3, 0);
  return v3;
}

//----- (00401AD0) --------------------------------------------------------
int __fastcall sub_401AD0(int a1)
{
  void **v2; // [sp+0h] [bp-4h]@1

  v2 = (void **)a1;
  sub_4024B0(a1);
  return sub_401F20(v2);
}

//----- (00401AF0) --------------------------------------------------------
int __thiscall sub_401AF0(int this, int a2)
{
  int v3; // esi@4
  int v4; // eax@5
  int v5; // esi@6
  int v6; // eax@10
  int v7; // [sp+4h] [bp-Ch]@1
  int v8; // [sp+Ch] [bp-4h]@5
  int v9; // [sp+8h] [bp-8h]@7

  v7 = this;
  if ( this != a2 )
  {
    if ( sub_4095F0(a2) )
    {
      v3 = sub_4095F0(a2);
      if ( v3 > (unsigned int)sub_4095F0(v7) )
      {
        v5 = sub_4095F0(a2);
        if ( v5 > (unsigned int)sub_4022A0(v7) )
        {
          if ( *(_DWORD *)(v7 + 12) )
          {
            sub_402480(*(_DWORD *)(v7 + 12), *(_DWORD *)(v7 + 16));
            unknown_libname_2(*(void **)(v7 + 12), (*(_DWORD *)(v7 + 20) - *(_DWORD *)(v7 + 12)) / 28);
          }
          v6 = sub_4095F0(a2);
          if ( sub_402400(v7, v6) )
            *(_DWORD *)(v7 + 16) = unknown_libname_3(*(_DWORD *)(a2 + 12), *(_DWORD *)(a2 + 16), *(_DWORD *)(v7 + 12));
        }
        else
        {
          v9 = *(_DWORD *)(a2 + 12) + 28 * sub_4095F0(v7);
          sub_403C80(*(_DWORD *)(a2 + 12), v9, *(_DWORD *)(v7 + 12));
          *(_DWORD *)(v7 + 16) = unknown_libname_3(v9, *(_DWORD *)(a2 + 16), *(_DWORD *)(v7 + 16));
        }
      }
      else
      {
        v4 = sub_403C80(*(_DWORD *)(a2 + 12), *(_DWORD *)(a2 + 16), *(_DWORD *)(v7 + 12));
        v8 = v4;
        sub_402480(v4, *(_DWORD *)(v7 + 16));
        *(_DWORD *)(v7 + 16) = *(_DWORD *)(v7 + 12) + 28 * sub_4095F0(a2);
      }
    }
    else
    {
      sub_401D30(v7);
    }
  }
  return v7;
}

//----- (00401C80) --------------------------------------------------------
int __thiscall sub_401C80(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_4095F0(this) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v5 + 12) + 28 * a2;
}

//----- (00401CB0) --------------------------------------------------------
int __thiscall sub_401CB0(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_4095F0(this);
  if ( v3 >= (unsigned int)sub_4022A0(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_4022E0(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_402530(*(void **)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00401D30) --------------------------------------------------------
int __fastcall sub_401D30(int a1)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // eax@1
  unsigned int v5; // edx@1
  int v6; // [sp+0h] [bp-2Ch]@1
  char v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+24h] [bp-8h]@1
  unsigned int v9; // [sp+28h] [bp-4h]@1
  char v10; // [sp+Ch] [bp-20h]@1
  int v11; // [sp+14h] [bp-18h]@1
  unsigned int v12; // [sp+18h] [bp-14h]@1
  char v13; // [sp+4h] [bp-28h]@1

  v6 = a1;
  v2 = sub_40EB60(a1, (int)&v7);
  v3 = *(_DWORD *)(v2 + 4);
  v8 = *(_DWORD *)v2;
  v9 = v3;
  v4 = sub_402FA0(v6, (int)&v10);
  v5 = *(_DWORD *)(v4 + 4);
  v11 = *(_DWORD *)v4;
  v12 = v5;
  return sub_402360(v6, (int)&v13, v11, v5, v8, v9);
}

//----- (00401D90) --------------------------------------------------------
int __fastcall sub_401D90(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_402680(v3, 0);
  return v3;
}

//----- (00401E00) --------------------------------------------------------
int __fastcall sub_401E00(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_402700(a1);
  return sub_401F20(v2);
}

//----- (00401E60) --------------------------------------------------------
int __thiscall sub_401E60(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_4025E0(this);
  if ( v3 >= (unsigned int)sub_4025A0(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_402600(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_402770(*(void **)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00401EE0) --------------------------------------------------------
int __thiscall sub_401EE0(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_4027F0((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (00401F20) --------------------------------------------------------
int __thiscall sub_401F20(void **this)
{
  return sub_402570(this);
}

//----- (00401F40) --------------------------------------------------------
char __thiscall sub_401F40(int this, unsigned int a2, int a3)
{
  int v3; // eax@1
  int v4; // [sp+0h] [bp-24h]@1
  int *v5; // [sp+14h] [bp-10h]@1
  int v6; // [sp+10h] [bp-14h]@1
  int v7; // [sp+20h] [bp-4h]@2

  v5 = &v4;
  v6 = this;
  LOBYTE(v3) = sub_402180(this, a2);
  if ( (unsigned __int8)v3 )
  {
    v7 = 0;
    v3 = sub_402B50(*(_DWORD *)(v6 + 12), a2, a3);
    *(_DWORD *)(v6 + 16) = v3;
  }
  return v3;
}

//----- (00401FE0) --------------------------------------------------------
int __fastcall sub_401FE0(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = *(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12);
  else
    v3 = 0;
  return v3;
}

//----- (00402020) --------------------------------------------------------
void *__thiscall sub_402020(int this, unsigned int a2, char a3)
{
  void *result; // eax@2
  int v4; // eax@2
  int v5; // edx@2
  int v6; // eax@2
  int v7; // eax@4
  int v8; // edx@4
  unsigned int v9; // eax@4
  int v10; // ST10_4@4
  int v11; // eax@4
  int v12; // eax@4
  unsigned int v13; // edx@4
  int v14; // [sp+0h] [bp-44h]@1
  char v15; // [sp+34h] [bp-10h]@2
  int v16; // [sp+3Ch] [bp-8h]@2
  int v17; // [sp+40h] [bp-4h]@2
  char v18; // [sp+24h] [bp-20h]@4
  int v19; // [sp+2Ch] [bp-18h]@4
  unsigned int v20; // [sp+30h] [bp-14h]@4
  char v21; // [sp+14h] [bp-30h]@4
  char v22; // [sp+Ch] [bp-38h]@4
  int v23; // [sp+1Ch] [bp-28h]@4
  unsigned int v24; // [sp+20h] [bp-24h]@4
  char v25; // [sp+4h] [bp-40h]@4

  v14 = this;
  if ( sub_4019B0(this) >= a2 )
  {
    result = (void *)sub_4019B0(v14);
    if ( a2 < (unsigned int)result )
    {
      v7 = sub_40EB60(v14, (int)&v18);
      v8 = *(_DWORD *)v7;
      v9 = *(_DWORD *)(v7 + 4);
      v19 = v8;
      v20 = v9;
      v10 = a2;
      v11 = sub_402FA0(v14, (int)&v21);
      v12 = sub_401EE0(v11, (int)&v22, v10);
      v13 = *(_DWORD *)(v12 + 4);
      v23 = *(_DWORD *)v12;
      v24 = v13;
      result = (void *)sub_4020E0(v14, (int)&v25, v23, v13, v19, v20);
    }
  }
  else
  {
    v4 = sub_40EB60(v14, (int)&v15);
    v5 = *(_DWORD *)(v4 + 4);
    v16 = *(_DWORD *)v4;
    v17 = v5;
    v6 = sub_4019B0(v14);
    result = sub_402830(v14, v16, v17, a2 - v6, (int)&a3);
  }
  return result;
}

//----- (004020E0) --------------------------------------------------------
int __thiscall sub_4020E0(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  void *Dst; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = (int)sub_403C10(v11, *(_DWORD *)(v8 + 16), Dst);
    v13 = v7;
    sub_402200(v7, *(_DWORD *)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = Dst;
  return a2;
}

//----- (00402180) --------------------------------------------------------
char __thiscall sub_402180(int this, unsigned int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_402810() >= a2 )
    {
      *(_DWORD *)(v3 + 12) = std__allocator_char___allocate(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = a2 + *(_DWORD *)(v3 + 12);
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00402200) --------------------------------------------------------
int __stdcall sub_402200(int a1, int a2)
{
  return sub_403D20();
}

//----- (00402230) --------------------------------------------------------
int __fastcall sub_402230(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_402200(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), *(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12));
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (004022A0) --------------------------------------------------------
int __fastcall sub_4022A0(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) / 28;
  else
    v3 = 0;
  return v3;
}

//----- (004022E0) --------------------------------------------------------
int __thiscall sub_4022E0(int this, int a2, int a3, int a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_4095F0(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_4035A0((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_402BE0(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_40F2A0(v9, v8, v7);
  return a2;
}

//----- (00402360) --------------------------------------------------------
int __thiscall sub_402360(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  int v12; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = sub_403C80(v11, *(_DWORD *)(v8 + 16), v12);
    v13 = v7;
    sub_402480(v7, *(_DWORD *)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = v12;
  return a2;
}

//----- (00402400) --------------------------------------------------------
char __thiscall sub_402400(int this, unsigned int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_402BC0() >= a2 )
    {
      *(_DWORD *)(v3 + 12) = sub_402F80(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12) + 28 * a2;
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00402480) --------------------------------------------------------
int __stdcall sub_402480(int a1, int a2)
{
  return sub_403D60(a1, a2);
}

//----- (004024B0) --------------------------------------------------------
int __fastcall sub_4024B0(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_402480(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) / 28);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (00402530) --------------------------------------------------------
int __stdcall sub_402530(void *a1, int a2, int a3)
{
  sub_403DA0(a1, a2, a3);
  return (int)((char *)a1 + 28 * a2);
}

//----- (00402570) --------------------------------------------------------
int __thiscall sub_402570(void **this)
{
  void **v2; // [sp+0h] [bp-4h]@1

  v2 = this;
  unknown_libname_2(*this, 1);
  return std___Init_locks____Init_locks();
}

//----- (004025A0) --------------------------------------------------------
int __fastcall sub_4025A0(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 6;
  else
    v3 = 0;
  return v3;
}

//----- (004025E0) --------------------------------------------------------
int __fastcall sub_4025E0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12)) >> 6;
}

//----- (00402600) --------------------------------------------------------
int __thiscall sub_402600(int this, int a2, int a3, int a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_4025E0(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_403630((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_403020(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_4035F0(v9, v8, v7);
  return a2;
}

//----- (00402680) --------------------------------------------------------
char __thiscall sub_402680(int this, unsigned int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_402FD0() >= a2 )
    {
      *(_DWORD *)(v3 + 12) = sub_403510(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12) + (a2 << 6);
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00402700) --------------------------------------------------------
int __fastcall sub_402700(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_402FF0(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 6);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (00402770) --------------------------------------------------------
int __stdcall sub_402770(void *a1, int a2, int a3)
{
  sub_403DF0(a1, a2, a3);
  return (int)((char *)a1 + 64 * a2);
}

//----- (004027B0) --------------------------------------------------------
int __thiscall sub_4027B0(int this, char a2)
{
  char v3; // ST04_1@1
  int v4; // [sp+0h] [bp-8h]@1
  char *v5; // [sp+4h] [bp-4h]@1

  v4 = this;
  v3 = this;
  v5 = &v3;
  std___Init_locks__operator_(&a2);
  sub_403460(v4, v3);
  std___Init_locks__operator_(&a2);
  return v4;
}

//----- (004027F0) --------------------------------------------------------
int __thiscall sub_4027F0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_403530(this, a2);
  return v3;
}

//----- (00402810) --------------------------------------------------------
int __cdecl sub_402810()
{
  return std__allocator_char___max_size();
}

//----- (00402830) --------------------------------------------------------
void *__thiscall sub_402830(int this, int a2, char a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  int v8; // eax@11
  int v9; // eax@11
  int v10; // [sp+0h] [bp-40h]@1
  int *v11; // [sp+30h] [bp-10h]@1
  int v12; // [sp+14h] [bp-2Ch]@1
  int v13; // [sp+2Ch] [bp-14h]@1
  int v14; // [sp+10h] [bp-30h]@7
  void *Dst; // [sp+24h] [bp-1Ch]@11
  void *v16; // [sp+28h] [bp-18h]@11
  signed int v17; // [sp+3Ch] [bp-4h]@11
  char v18; // [sp+23h] [bp-1Dh]@15
  char v19; // [sp+1Bh] [bp-25h]@16
  int v20; // [sp+1Ch] [bp-24h]@16

  v11 = &v10;
  v12 = this;
  result = (void *)sub_401FE0(this);
  v13 = (int)result;
  if ( a4 )
  {
    v6 = sub_402810();
    if ( v6 - sub_4019B0(v12) >= (unsigned int)a4 )
    {
      if ( v13 >= (unsigned int)(a4 + sub_4019B0(v12)) )
      {
        if ( *(_DWORD *)(v12 + 16) - a3 >= (unsigned int)a4 )
        {
          v19 = *(_BYTE *)a5;
          v20 = *(_DWORD *)(v12 + 16);
          *(_DWORD *)(v12 + 16) = unknown_libname_4(v20 - a4, v20, *(void **)(v12 + 16));
          sub_403EA0(a3, v20 - a4, v20);
          result = (void *)sub_403E70(a3, (_BYTE)a4 + a3, (int)&v19);
        }
        else
        {
          v18 = *(_BYTE *)a5;
          unknown_libname_4(a3, *(_DWORD *)(v12 + 16), (void *)(a4 + a3));
          v17 = 2;
          sub_402B50(*(_DWORD *)(v12 + 16), a4 - (*(_DWORD *)(v12 + 16) - a3), (int)&v18);
          v17 = -1;
          *(_DWORD *)(v12 + 16) += a4;
          result = (void *)sub_403E70(a3, *(_DWORD *)(v12 + 16) - a4, (int)&v18);
        }
      }
      else
      {
        if ( sub_402810() - ((unsigned int)v13 >> 1) >= v13 )
          v14 = v13 + ((unsigned int)v13 >> 1);
        else
          v14 = 0;
        v13 = v14;
        if ( v13 < (unsigned int)(a4 + sub_4019B0(v12)) )
          v13 = a4 + sub_4019B0(v12);
        v7 = (void *)std__allocator_char___allocate(v13);
        Dst = v7;
        v16 = v7;
        v17 = 0;
        v8 = unknown_libname_4(*(_DWORD *)(v12 + 12), a3, v7);
        v16 = (void *)v8;
        v9 = sub_402B50(v8, a4, a5);
        v16 = (void *)v9;
        unknown_libname_4(a3, *(_DWORD *)(v12 + 16), (void *)v9);
        v17 = -1;
        a4 += sub_4019B0(v12);
        if ( *(_DWORD *)(v12 + 12) )
        {
          sub_402200(*(_DWORD *)(v12 + 12), *(_DWORD *)(v12 + 16));
          unknown_libname_2(*(void **)(v12 + 12), *(_DWORD *)(v12 + 20) - *(_DWORD *)(v12 + 12));
        }
        *(_DWORD *)(v12 + 20) = (char *)Dst + v13;
        *(_DWORD *)(v12 + 16) = (char *)Dst + a4;
        result = Dst;
        *(_DWORD *)(v12 + 12) = Dst;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (00402B50) --------------------------------------------------------
int __stdcall sub_402B50(int a1, int a2, int a3)
{
  sub_403F10(a1, a2, a3);
  return a2 + a1;
}

//----- (00402BC0) --------------------------------------------------------
signed int __cdecl sub_402BC0()
{
  return sub_4039E0();
}

//----- (00402BE0) --------------------------------------------------------
void *__thiscall sub_402BE0(int this, int a2, int a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int v10; // [sp+0h] [bp-78h]@1
  int *v11; // [sp+68h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-5Ch]@1
  int v13; // [sp+64h] [bp-14h]@1
  int v14; // [sp+18h] [bp-60h]@7
  void *v15; // [sp+5Ch] [bp-1Ch]@11
  void *v16; // [sp+60h] [bp-18h]@11
  signed int v17; // [sp+74h] [bp-4h]@11
  void *v18; // [sp+14h] [bp-64h]@11
  int v19; // [sp+10h] [bp-68h]@11
  char v20; // [sp+40h] [bp-38h]@15
  char v21; // [sp+20h] [bp-58h]@16
  int v22; // [sp+3Ch] [bp-3Ch]@16

  v11 = &v10;
  v12 = this;
  result = (void *)sub_4022A0(this);
  v13 = (int)result;
  if ( a4 )
  {
    v6 = sub_4095F0(v12);
    if ( sub_402BC0() - v6 >= (unsigned int)a4 )
    {
      if ( v13 >= (unsigned int)(a4 + sub_4095F0(v12)) )
      {
        if ( (*(_DWORD *)(v12 + 16) - a3) / 28 >= (unsigned int)a4 )
        {
          sub_4036B0((int)&v21, a5);
          v17 = 5;
          v22 = *(_DWORD *)(v12 + 16);
          *(_DWORD *)(v12 + 16) = unknown_libname_5(v22 - 28 * a4, v22, *(_DWORD *)(v12 + 16));
          sub_404010(a3, v22 - 28 * a4, v22);
          sub_403FE0(a3, (_BYTE)a3 + 28 * (_BYTE)a4, (int)&v21);
          v17 = -1;
          result = (void *)sub_42BCD0((int)&v21);
        }
        else
        {
          sub_4036B0((int)&v20, a5);
          v17 = 2;
          unknown_libname_5(a3, *(_DWORD *)(v12 + 16), a3 + 28 * a4);
          LOBYTE(v17) = 3;
          sub_402530(*(void **)(v12 + 16), a4 - (*(_DWORD *)(v12 + 16) - a3) / 28, (int)&v20);
          v17 = 2;
          *(_DWORD *)(v12 + 16) += 28 * a4;
          sub_403FE0(a3, *(_DWORD *)(v12 + 16) - 28 * a4, (int)&v20);
          v17 = -1;
          result = (void *)sub_42BCD0((int)&v20);
        }
      }
      else
      {
        if ( sub_402BC0() - ((unsigned int)v13 >> 1) >= v13 )
          v14 = v13 + ((unsigned int)v13 >> 1);
        else
          v14 = 0;
        v13 = v14;
        if ( v13 < (unsigned int)(a4 + sub_4095F0(v12)) )
          v13 = a4 + sub_4095F0(v12);
        v7 = sub_402F80(v13);
        v15 = v7;
        v16 = v7;
        v17 = 0;
        v8 = (void *)unknown_libname_5(*(_DWORD *)(v12 + 12), a3, v7);
        v18 = v8;
        v16 = v8;
        v9 = sub_402530(v8, a4, a5);
        v19 = v9;
        v16 = (void *)v9;
        unknown_libname_5(a3, *(_DWORD *)(v12 + 16), v9);
        v17 = -1;
        a4 += sub_4095F0(v12);
        if ( *(_DWORD *)(v12 + 12) )
        {
          sub_402480(*(_DWORD *)(v12 + 12), *(_DWORD *)(v12 + 16));
          unknown_libname_2(*(void **)(v12 + 12), (*(_DWORD *)(v12 + 20) - *(_DWORD *)(v12 + 12)) / 28);
        }
        *(_DWORD *)(v12 + 20) = (char *)v15 + 28 * v13;
        *(_DWORD *)(v12 + 16) = (char *)v15 + 28 * a4;
        result = v15;
        *(_DWORD *)(v12 + 12) = v15;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (00402F80) --------------------------------------------------------
void *__stdcall sub_402F80(unsigned int a1)
{
  return sub_404080(a1);
}

//----- (00402FA0) --------------------------------------------------------
int __thiscall sub_402FA0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_411E20(a2, *(_DWORD *)(this + 12), this);
  return a2;
}

//----- (00402FD0) --------------------------------------------------------
signed int __cdecl sub_402FD0()
{
  return sub_403A10();
}

//----- (00402FF0) --------------------------------------------------------
int __stdcall sub_402FF0(int a1, int a2)
{
  return sub_4040D0(a1, a2);
}

//----- (00403020) --------------------------------------------------------
void *__thiscall sub_403020(int this, int a2, int a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int  s; // [sp+C4h] [bp+0h]@1
  unsigned int v11; // [sp+A4h] [bp-20h]@1
  int v12; // [sp-4h] [bp-C8h]@1
  int *v13; // [sp+B4h] [bp-10h]@1
  int v14; // [sp+18h] [bp-ACh]@1
  int v15; // [sp+B0h] [bp-14h]@1
  int v16; // [sp+14h] [bp-B0h]@7
  void *v17; // [sp+A8h] [bp-1Ch]@11
  void *v18; // [sp+ACh] [bp-18h]@11
  signed int v19; // [sp+C0h] [bp-4h]@11
  void *v20; // [sp+10h] [bp-B4h]@11
  int v21; // [sp+Ch] [bp-B8h]@11
  char v22; // [sp+64h] [bp-60h]@15
  char v23; // [sp+1Ch] [bp-A8h]@16
  int v24; // [sp+60h] [bp-64h]@16

  v11 = (unsigned int)& s ^ dword_43901C;
  v13 = &v12;
  v14 = this;
  result = (void *)sub_4025A0(this);
  v15 = (int)result;
  if ( a4 )
  {
    v6 = sub_4025E0(v14);
    if ( sub_402FD0() - v6 >= (unsigned int)a4 )
    {
      if ( v15 >= (unsigned int)(a4 + sub_4025E0(v14)) )
      {
        if ( (*(_DWORD *)(v14 + 16) - a3) >> 6 >= (unsigned int)a4 )
        {
          sub_4036E0((int)&v23, a5);
          v19 = 5;
          v24 = *(_DWORD *)(v14 + 16);
          *(_DWORD *)(v14 + 16) = unknown_libname_6(v24 - (a4 << 6), v24, *(_DWORD *)(v14 + 16));
          sub_404170(a3, v24 - (a4 << 6), v24);
          sub_404140(a3, (_BYTE)a3 + ((_BYTE)a4 << 6), (int)&v23);
          v19 = -1;
          result = (void *)sub_42C3B0((int)&v23);
        }
        else
        {
          sub_4036E0((int)&v22, a5);
          v19 = 2;
          unknown_libname_6(a3, *(_DWORD *)(v14 + 16), a3 + (a4 << 6));
          LOBYTE(v19) = 3;
          sub_402770(*(void **)(v14 + 16), a4 - ((*(_DWORD *)(v14 + 16) - a3) >> 6), (int)&v22);
          v19 = 2;
          *(_DWORD *)(v14 + 16) += a4 << 6;
          sub_404140(a3, *(_DWORD *)(v14 + 16) - (a4 << 6), (int)&v22);
          v19 = -1;
          result = (void *)sub_42C3B0((int)&v22);
        }
      }
      else
      {
        if ( sub_402FD0() - ((unsigned int)v15 >> 1) >= v15 )
          v16 = v15 + ((unsigned int)v15 >> 1);
        else
          v16 = 0;
        v15 = v16;
        if ( v15 < (unsigned int)(a4 + sub_4025E0(v14)) )
          v15 = a4 + sub_4025E0(v14);
        v7 = sub_403510(v15);
        v17 = v7;
        v18 = v7;
        v19 = 0;
        v8 = (void *)unknown_libname_6(*(_DWORD *)(v14 + 12), a3, v7);
        v20 = v8;
        v18 = v8;
        v9 = sub_402770(v8, a4, a5);
        v21 = v9;
        v18 = (void *)v9;
        unknown_libname_6(a3, *(_DWORD *)(v14 + 16), v9);
        v19 = -1;
        a4 += sub_4025E0(v14);
        if ( *(_DWORD *)(v14 + 12) )
        {
          sub_402FF0(*(_DWORD *)(v14 + 12), *(_DWORD *)(v14 + 16));
          unknown_libname_2(*(void **)(v14 + 12), (*(_DWORD *)(v14 + 20) - *(_DWORD *)(v14 + 12)) >> 6);
        }
        *(_DWORD *)(v14 + 20) = (char *)v17 + 64 * v15;
        *(_DWORD *)(v14 + 16) = (char *)v17 + 64 * a4;
        result = v17;
        *(_DWORD *)(v14 + 12) = v17;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (00403460) --------------------------------------------------------
int __thiscall sub_403460(int this, char a2)
{
  void *v3; // eax@1
  void *v4; // eax@1
  int v5; // [sp+8h] [bp-1Ch]@1
  int v6; // [sp+20h] [bp-4h]@1
  void *v7; // [sp+Ch] [bp-18h]@1
  void *v8; // [sp+10h] [bp-14h]@1
  int v9; // [sp+4h] [bp-20h]@2

  v5 = this;
  _LocaleUpdate__GetLocaleT();
  v6 = 0;
  std___Init_locks__operator_(&a2);
  v3 = sub_4038C0(1u);
  v7 = v3;
  v4 = operator new(4u, v3);
  v8 = v4;
  if ( v4 )
    v9 = sub_401000(v5);
  else
    v9 = 0;
  *(_DWORD *)v5 = v9;
  return v5;
}

//----- (00403510) --------------------------------------------------------
void *__stdcall sub_403510(unsigned int a1)
{
  return sub_4041E0(a1);
}

//----- (00403530) --------------------------------------------------------
int __thiscall sub_403530(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(a2 + *(_DWORD *)(v7 + 4)) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(a2 + *(_DWORD *)(v7 + 4)) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += a2;
  return v7;
}

//----- (004035A0) --------------------------------------------------------
int __thiscall sub_4035A0(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return (*(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4)) / 28;
}

//----- (004035F0) --------------------------------------------------------
int __thiscall sub_4035F0(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_403A40((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (00403630) --------------------------------------------------------
int __thiscall sub_403630(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return (*(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4)) >> 6;
}

//----- (004036B0) --------------------------------------------------------
int __thiscall sub_4036B0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  sub_4037A0(v3 + 4, a2 + 4);
  return v3;
}

//----- (004036E0) --------------------------------------------------------
int __thiscall sub_4036E0(int this, int a2)
{
  int v3; // [sp+4h] [bp-10h]@1
  int v4; // [sp+10h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 4);
  v4 = 0;
  *(_WORD *)(v3 + 32) = *(_WORD *)(a2 + 32);
  *(_WORD *)(v3 + 34) = *(_WORD *)(a2 + 34);
  *(_WORD *)(v3 + 36) = *(_WORD *)(a2 + 36);
  *(_WORD *)(v3 + 38) = *(_WORD *)(a2 + 38);
  sub_4038E0(v3 + 40, a2 + 40);
  return v3;
}

//----- (004037A0) --------------------------------------------------------
int __thiscall sub_4037A0(int this, int a2)
{
  char v3; // ST10_1@1
  int v4; // eax@1
  void *v5; // ST10_4@2
  int v6; // eax@2
  int v7; // ST0C_4@2
  int v8; // ST08_4@2
  int v9; // eax@2
  int v10; // [sp+0h] [bp-38h]@1
  int *v11; // [sp+28h] [bp-10h]@1
  int v12; // [sp+10h] [bp-28h]@1
  char *v13; // [sp+24h] [bp-14h]@1
  int v14; // [sp+34h] [bp-4h]@1
  char v15; // [sp+1Ch] [bp-1Ch]@2
  char v16; // [sp+14h] [bp-24h]@2

  v11 = &v10;
  v12 = this;
  v3 = this;
  v13 = &v3;
  std___Init_locks__operator_(a2 + 8);
  sub_4027B0(v12, v3);
  v14 = 0;
  v4 = sub_4019B0(a2);
  if ( sub_402180(v12, v4) )
  {
    LOBYTE(v14) = 1;
    v5 = *(void **)(v12 + 12);
    v6 = sub_40F330(a2, (int)&v15);
    v7 = *(_DWORD *)(v6 + 4);
    v8 = *(_DWORD *)v6;
    v9 = sub_403A60(a2, (int)&v16);
    *(_DWORD *)(v12 + 16) = sub_404230(*(_DWORD *)v9, *(_DWORD *)(v9 + 4), v8, v7, v5);
  }
  return v12;
}

//----- (004038C0) --------------------------------------------------------
void *__stdcall sub_4038C0(unsigned int a1)
{
  return sub_404260(a1);
}

//----- (004038E0) --------------------------------------------------------
int __thiscall sub_4038E0(int this, int a2)
{
  char v3; // ST10_1@1
  int v4; // eax@1
  void *v5; // ST10_4@2
  int v6; // eax@2
  int v7; // ST0C_4@2
  int v8; // ST08_4@2
  int v9; // eax@2
  int v10; // [sp+0h] [bp-3Ch]@1
  int *v11; // [sp+2Ch] [bp-10h]@1
  int v12; // [sp+14h] [bp-28h]@1
  char *v13; // [sp+28h] [bp-14h]@1
  int v14; // [sp+38h] [bp-4h]@1
  char v15; // [sp+20h] [bp-1Ch]@2
  char v16; // [sp+18h] [bp-24h]@2

  v11 = &v10;
  v12 = this;
  v3 = this;
  v13 = &v3;
  std___Init_locks__operator_(a2 + 8);
  sub_4027B0(v12, v3);
  v14 = 0;
  v4 = sub_4095F0(a2);
  if ( sub_402400(v12, v4) )
  {
    LOBYTE(v14) = 1;
    v5 = *(void **)(v12 + 12);
    v6 = sub_40F330(a2, (int)&v15);
    v7 = *(_DWORD *)(v6 + 4);
    v8 = *(_DWORD *)v6;
    v9 = sub_403A60(a2, (int)&v16);
    *(_DWORD *)(v12 + 16) = sub_4042B0(*(_DWORD *)v9, *(_DWORD *)(v9 + 4), v8, v7, v5);
  }
  return v12;
}

//----- (004039E0) --------------------------------------------------------
signed int __cdecl sub_4039E0()
{
  return 153391689;
}

//----- (00403A10) --------------------------------------------------------
signed int __cdecl sub_403A10()
{
  return 67108863;
}

//----- (00403A40) --------------------------------------------------------
int __thiscall sub_403A40(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_403A90(this, a2);
  return v3;
}

//----- (00403A60) --------------------------------------------------------
int __thiscall sub_403A60(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_412330(a2, *(_DWORD *)(this + 12), this);
  return a2;
}

//----- (00403A90) --------------------------------------------------------
int __thiscall sub_403A90(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(*(_DWORD *)(v7 + 4) + (a2 << 6)) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(*(_DWORD *)(v7 + 4) + (a2 << 6)) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += a2 << 6;
  return v7;
}

//----- (00403B10) --------------------------------------------------------
void *__thiscall sub_403B10(int this, char a2, char a3)
{
  int v4; // [sp+0h] [bp-8h]@1
  char v5; // [sp+7h] [bp-1h]@1
  unsigned __int8 v6; // [sp+6h] [bp-2h]@1

  v4 = this;
  unknown_libname_18(&v5);
  return sub_404310(v4, a2, a3, v6);
}

//----- (00403B50) --------------------------------------------------------
void *__thiscall sub_403B50(int this, char a2, int a3, char a4, int a5)
{
  int v6; // [sp+0h] [bp-8h]@1
  char v7; // [sp+7h] [bp-1h]@1
  unsigned __int8 v8; // [sp+6h] [bp-2h]@1

  v6 = this;
  unknown_libname_18(&v7);
  return sub_4043A0(v6, a2, a3, a4, a5, v8);
}

//----- (00403B90) --------------------------------------------------------
void *__thiscall sub_403B90(int this, char a2, int a3, char a4, int a5)
{
  int v6; // [sp+0h] [bp-8h]@1
  char v7; // [sp+7h] [bp-1h]@1
  unsigned __int8 v8; // [sp+6h] [bp-2h]@1

  v6 = this;
  unknown_libname_18(&v7);
  return sub_404430(v6, a2, a3, a4, a5, v8);
}

//----- (00403BD0) --------------------------------------------------------
int __thiscall sub_403BD0(int this, char a2, int a3, char a4, int a5)
{
  int v6; // [sp+0h] [bp-8h]@1
  char v7; // [sp+7h] [bp-1h]@1
  unsigned __int8 v8; // [sp+6h] [bp-2h]@1

  v6 = this;
  unknown_libname_18(&v7);
  return sub_4044C0(v6, a2, a3, a4, a5, v8);
}

//----- (00403C10) --------------------------------------------------------
char *__cdecl sub_403C10(char a1, char a2, void *Dst)
{
  char v4; // ST0C_1@1
  void *v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = Dst;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_404530((void *)v7, v6, v5);
}

//----- (00403C80) --------------------------------------------------------
int __cdecl sub_403C80(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_404590(v7, v6, v5);
}

//----- (00403D20) --------------------------------------------------------
int __cdecl sub_403D20()
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return _initp_misc_winxfltr();
}

//----- (00403D60) --------------------------------------------------------
int __cdecl sub_403D60(int a1, int a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_404650(a1, a2);
}

//----- (00403DA0) --------------------------------------------------------
int __cdecl sub_403DA0(void *a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_404680(a1, a2, a3);
}

//----- (00403DF0) --------------------------------------------------------
int __cdecl sub_403DF0(void *a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_404740(a1, a2, a3);
}

//----- (00403E70) --------------------------------------------------------
int __cdecl sub_403E70(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_404850(v6, v5, v4);
}

//----- (00403EA0) --------------------------------------------------------
void *__cdecl sub_403EA0(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_404880((void *)v7, v6, v5);
}

//----- (00403F10) --------------------------------------------------------
int __cdecl sub_403F10(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_4048D0(a1, a2, a3);
}

//----- (00403FE0) --------------------------------------------------------
int __cdecl sub_403FE0(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_404940(v6, v5, v4);
}

//----- (00404010) --------------------------------------------------------
int __cdecl sub_404010(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_404970(v7, v6, v5);
}

//----- (00404080) --------------------------------------------------------
void *__cdecl sub_404080(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0x1C )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(28 * a1);
}

//----- (004040D0) --------------------------------------------------------
int __cdecl sub_4040D0(int a1, int a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_4049C0(a1, a2);
}

//----- (00404140) --------------------------------------------------------
int __cdecl sub_404140(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_404A40(v6, v5, v4);
}

//----- (00404170) --------------------------------------------------------
int __cdecl sub_404170(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_404A70(v7, v6, v5);
}

//----- (004041E0) --------------------------------------------------------
void *__cdecl sub_4041E0(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0x40 )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(a1 << 6);
}

//----- (00404230) --------------------------------------------------------
char *__stdcall sub_404230(char a1, int a2, char a3, int a4, void *Dst)
{
  return sub_404AC0(a1, a2, a3, a4, Dst);
}

//----- (00404260) --------------------------------------------------------
void *__cdecl sub_404260(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 4 )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(4 * a1);
}

//----- (004042B0) --------------------------------------------------------
void *__stdcall sub_4042B0(char a1, int a2, char a3, int a4, void *a5)
{
  return sub_404B20(a1, a2, a3, a4, a5);
}

//----- (00404310) --------------------------------------------------------
void *__thiscall sub_404310(int this, char a2, char a3, int a4)
{
  int v5; // eax@1
  unsigned int v6; // edx@1
  int v7; // eax@1
  unsigned int v8; // edx@1
  int v9; // eax@1
  int v10; // edx@1
  int v11; // [sp+0h] [bp-3Ch]@1
  char v12; // [sp+2Ch] [bp-10h]@1
  int v13; // [sp+34h] [bp-8h]@1
  unsigned int v14; // [sp+38h] [bp-4h]@1
  char v15; // [sp+1Ch] [bp-20h]@1
  int v16; // [sp+24h] [bp-18h]@1
  unsigned int v17; // [sp+28h] [bp-14h]@1
  char v18; // [sp+14h] [bp-28h]@1
  char v19; // [sp+4h] [bp-38h]@1
  int v20; // [sp+Ch] [bp-30h]@1
  int v21; // [sp+10h] [bp-2Ch]@1

  v11 = this;
  v5 = sub_40EB60(this, (int)&v12);
  v6 = *(_DWORD *)(v5 + 4);
  v13 = *(_DWORD *)v5;
  v14 = v6;
  v7 = sub_402FA0(v11, (int)&v15);
  v8 = *(_DWORD *)(v7 + 4);
  v16 = *(_DWORD *)v7;
  v17 = v8;
  sub_4020E0(v11, (int)&v18, v16, v8, v13, v14);
  v9 = sub_402FA0(v11, (int)&v19);
  v10 = *(_DWORD *)(v9 + 4);
  v20 = *(_DWORD *)v9;
  v21 = v10;
  return sub_404CB0(v11, v20, v10, a2, a3);
}

//----- (004043A0) --------------------------------------------------------
void *__thiscall sub_4043A0(int this, char a2, int a3, char a4, int a5, int a6)
{
  int v7; // eax@1
  unsigned int v8; // edx@1
  int v9; // eax@1
  unsigned int v10; // edx@1
  int v11; // eax@1
  int v12; // edx@1
  int v13; // [sp+0h] [bp-3Ch]@1
  char v14; // [sp+2Ch] [bp-10h]@1
  int v15; // [sp+34h] [bp-8h]@1
  unsigned int v16; // [sp+38h] [bp-4h]@1
  char v17; // [sp+1Ch] [bp-20h]@1
  int v18; // [sp+24h] [bp-18h]@1
  unsigned int v19; // [sp+28h] [bp-14h]@1
  char v20; // [sp+14h] [bp-28h]@1
  char v21; // [sp+4h] [bp-38h]@1
  int v22; // [sp+Ch] [bp-30h]@1
  int v23; // [sp+10h] [bp-2Ch]@1

  v13 = this;
  v7 = sub_40EB60(this, (int)&v14);
  v8 = *(_DWORD *)(v7 + 4);
  v15 = *(_DWORD *)v7;
  v16 = v8;
  v9 = sub_402FA0(v13, (int)&v17);
  v10 = *(_DWORD *)(v9 + 4);
  v18 = *(_DWORD *)v9;
  v19 = v10;
  sub_4020E0(v13, (int)&v20, v18, v10, v15, v16);
  v11 = sub_402FA0(v13, (int)&v21);
  v12 = *(_DWORD *)(v11 + 4);
  v22 = *(_DWORD *)v11;
  v23 = v12;
  return sub_404CF0(v13, v22, v12, a2, a3, a4, a5);
}

//----- (00404430) --------------------------------------------------------
void *__thiscall sub_404430(int this, char a2, int a3, char a4, int a5, int a6)
{
  int v7; // eax@1
  unsigned int v8; // edx@1
  int v9; // eax@1
  unsigned int v10; // edx@1
  int v11; // eax@1
  int v12; // edx@1
  int v13; // [sp+0h] [bp-3Ch]@1
  char v14; // [sp+2Ch] [bp-10h]@1
  int v15; // [sp+34h] [bp-8h]@1
  unsigned int v16; // [sp+38h] [bp-4h]@1
  char v17; // [sp+1Ch] [bp-20h]@1
  int v18; // [sp+24h] [bp-18h]@1
  unsigned int v19; // [sp+28h] [bp-14h]@1
  char v20; // [sp+14h] [bp-28h]@1
  char v21; // [sp+4h] [bp-38h]@1
  int v22; // [sp+Ch] [bp-30h]@1
  int v23; // [sp+10h] [bp-2Ch]@1

  v13 = this;
  v7 = sub_40EB60(this, (int)&v14);
  v8 = *(_DWORD *)(v7 + 4);
  v15 = *(_DWORD *)v7;
  v16 = v8;
  v9 = sub_402FA0(v13, (int)&v17);
  v10 = *(_DWORD *)(v9 + 4);
  v18 = *(_DWORD *)v9;
  v19 = v10;
  sub_4020E0(v13, (int)&v20, v18, v10, v15, v16);
  v11 = sub_402FA0(v13, (int)&v21);
  v12 = *(_DWORD *)(v11 + 4);
  v22 = *(_DWORD *)v11;
  v23 = v12;
  return sub_404D40(v13, v22, v12, a2, a3, a4, a5);
}

//----- (004044C0) --------------------------------------------------------
int __thiscall sub_4044C0(int this, char a2, int a3, char a4, int a5, int a6)
{
  int v7; // eax@1
  int v8; // edx@1
  int v9; // eax@1
  int v10; // edx@1
  int v11; // [sp+0h] [bp-24h]@1
  char v12; // [sp+14h] [bp-10h]@1
  int v13; // [sp+1Ch] [bp-8h]@1
  int v14; // [sp+20h] [bp-4h]@1
  int v15; // [sp+Ch] [bp-18h]@1
  int v16; // [sp+10h] [bp-14h]@1

  v11 = this;
  v7 = std__basic_string_char_std__char_traits_char__std__allocator_char____end(this, &v12);
  v8 = *(_DWORD *)(v7 + 4);
  v13 = *(_DWORD *)v7;
  v14 = v8;
  v9 = std__basic_string_char_std__char_traits_char__std__allocator_char____begin(v11);
  v10 = *(_DWORD *)(v9 + 4);
  v15 = *(_DWORD *)v9;
  v16 = v10;
  return sub_404D90(v11, v15, v10, v13, v14, a2, a3, a4, a5);
}

//----- (00404530) --------------------------------------------------------
char *__cdecl sub_404530(void *Src, int a2, void *Dst)
{
  rsize_t MaxCount; // [sp+0h] [bp-8h]@1
  char *v5; // [sp+4h] [bp-4h]@1

  MaxCount = a2 - (_DWORD)Src;
  v5 = (char *)Dst + a2 - (_DWORD)Src;
  if ( a2 - (_DWORD)Src > 0 )
    memmove_s(Dst, MaxCount, Src, MaxCount);
  return v5;
}

//----- (00404570) --------------------------------------------------------
int __cdecl sub_404570(int a1)
{
  return sub_414AE0(a1);
}

//----- (00404590) --------------------------------------------------------
int __cdecl sub_404590(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 + 28 * (a2 - a1) / 28;
  v4 = sub_404570((int)&a3);
  sub_404DE0(a1, a2, v4);
  return v5;
}

//----- (004045F0) --------------------------------------------------------
void *__cdecl sub_4045F0(char a1, char a2, void *a3)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_404E20(v8, v7, v6);
}

//----- (00404650) --------------------------------------------------------
int __cdecl sub_404650(int a1, int a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_404C50(a1);
    result = a1 + 28;
    a1 += 28;
  }
  return result;
}

//----- (00404680) --------------------------------------------------------
int __cdecl sub_404680(void *a1, int a2, int a3)
{
  int result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = (int)a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_404C30(a1, a3);
    --a2;
    a1 = (char *)a1 + 28;
  }
  return result;
}

//----- (00404740) --------------------------------------------------------
int __cdecl sub_404740(void *a1, int a2, int a3)
{
  int result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = (int)a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_404C70(a1, a3);
    --a2;
    a1 = (char *)a1 + 64;
  }
  return result;
}

//----- (00404800) --------------------------------------------------------
char *__cdecl sub_404800(char a1, char a2, void *Dst)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = Dst;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_404EE0(v7, v6, v5);
}

//----- (00404850) --------------------------------------------------------
int __cdecl sub_404850(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    *(_BYTE *)a1 = *(_BYTE *)a3;
    result = a1++ + 1;
  }
  return result;
}

//----- (00404880) --------------------------------------------------------
void *__cdecl sub_404880(void *Src, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_404F00(Src, a2, a3);
}

//----- (004048D0) --------------------------------------------------------
int __cdecl sub_4048D0(int a1, int a2, int a3)
{
  return sub_404F40(a1, a2, a3);
}

//----- (004048F0) --------------------------------------------------------
void *__cdecl sub_4048F0(char a1, char a2, void *a3)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_404F80(v7, v6, v5);
}

//----- (00404940) --------------------------------------------------------
int __cdecl sub_404940(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_404B80(a1, a3);
    result = a1 + 28;
    a1 += 28;
  }
  return result;
}

//----- (00404970) --------------------------------------------------------
int __cdecl sub_404970(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_404FA0(a1, a2, a3);
}

//----- (004049C0) --------------------------------------------------------
int __cdecl sub_4049C0(int a1, int a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_404C90(a1);
    result = a1 + 64;
    a1 += 64;
  }
  return result;
}

//----- (004049F0) --------------------------------------------------------
void *__cdecl sub_4049F0(char a1, char a2, void *a3)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_405000(v7, v6, v5);
}

//----- (00404A40) --------------------------------------------------------
int __cdecl sub_404A40(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_404BB0(a1, a3);
    result = a1 + 64;
    a1 += 64;
  }
  return result;
}

//----- (00404A70) --------------------------------------------------------
int __cdecl sub_404A70(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_405020(a1, a2, a3);
}

//----- (00404AC0) --------------------------------------------------------
char *__cdecl sub_404AC0(char a1, int a2, char a3, int a4, void *Dst)
{
  char v7; // al@1
  void *v8; // ST08_4@1
  int v9; // ST04_4@1
  int v10; // eax@1
  char v11; // [sp+3h] [bp-1h]@1

  v11 = 0;
  v7 = unknown_libname_17();
  v8 = Dst;
  v9 = sub_406200();
  v10 = sub_406200();
  return sub_405080((void *)v10, v9, v8);
}

//----- (00404B20) --------------------------------------------------------
void *__cdecl sub_404B20(char a1, int a2, char a3, int a4, void *a5)
{
  char v7; // al@1
  void *v8; // ST08_4@1
  int v9; // ST04_4@1
  int v10; // eax@1
  char v11; // [sp+3h] [bp-1h]@1

  v11 = 0;
  v7 = unknown_libname_17();
  v8 = a5;
  v9 = sub_406200();
  v10 = sub_406200();
  return sub_404E20(v10, v9, v8);
}

//----- (00404B80) --------------------------------------------------------
int __thiscall sub_404B80(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  sub_401810(v3 + 4, a2 + 4);
  return v3;
}

//----- (00404BB0) --------------------------------------------------------
int __thiscall sub_404BB0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 4);
  *(_WORD *)(v3 + 32) = *(_WORD *)(a2 + 32);
  *(_WORD *)(v3 + 34) = *(_WORD *)(a2 + 34);
  *(_WORD *)(v3 + 36) = *(_WORD *)(a2 + 36);
  *(_WORD *)(v3 + 38) = *(_WORD *)(a2 + 38);
  sub_401AF0(v3 + 40, a2 + 40);
  return v3;
}

//----- (00404C30) --------------------------------------------------------
int __stdcall sub_404C30(void *a1, int a2)
{
  return sub_4050C0(a1, a2);
}

//----- (00404C50) --------------------------------------------------------
void *__stdcall sub_404C50(int a1)
{
  return sub_405140(a1);
}

//----- (00404C70) --------------------------------------------------------
int __stdcall sub_404C70(void *a1, int a2)
{
  return sub_405150(a1, a2);
}

//----- (00404C90) --------------------------------------------------------
void *__stdcall sub_404C90(int a1)
{
  return sub_4051D0(a1);
}

//----- (00404CB0) --------------------------------------------------------
void *__thiscall sub_404CB0(int this, int a2, char a3, char a4, char a5)
{
  int v6; // [sp+0h] [bp-8h]@1
  char v7; // [sp+7h] [bp-1h]@1
  unsigned __int8 v8; // [sp+6h] [bp-2h]@1

  v6 = this;
  unknown_libname_18(&v7);
  return sub_405240(v6, a2, a3, a4, a5, v8);
}

//----- (00404CF0) --------------------------------------------------------
void *__thiscall sub_404CF0(int this, int a2, char a3, char a4, int a5, char a6, int a7)
{
  int v8; // [sp+0h] [bp-8h]@1
  char v9; // [sp+7h] [bp-1h]@1
  unsigned __int8 v10; // [sp+6h] [bp-2h]@1

  v8 = this;
  unknown_libname_18(&v9);
  return sub_4054C0(v8, a2, a3, a4, a5, a6, a7, v10);
}

//----- (00404D40) --------------------------------------------------------
void *__thiscall sub_404D40(int this, int a2, char a3, char a4, int a5, char a6, int a7)
{
  int v8; // [sp+0h] [bp-8h]@1
  char v9; // [sp+7h] [bp-1h]@1
  unsigned __int8 v10; // [sp+6h] [bp-2h]@1

  v8 = this;
  unknown_libname_18(&v9);
  return sub_405750(v8, a2, a3, a4, a5, a6, a7, v10);
}

//----- (00404D90) --------------------------------------------------------
int __thiscall sub_404D90(int this, int a2, int a3, int a4, int a5, char a6, int a7, char a8, int a9)
{
  int v10; // [sp+0h] [bp-8h]@1
  char v11; // [sp+7h] [bp-1h]@1
  unsigned __int8 v12; // [sp+6h] [bp-2h]@1

  v10 = this;
  unknown_libname_18(&v11);
  return sub_4059F0(v10, a2, a3, a4, a5, a6, a7, a8, a9, v12);
}

//----- (00404DE0) --------------------------------------------------------
int __cdecl sub_404DE0(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    sub_404B80(a3, a1);
    a3 += 28;
    a1 += 28;
  }
  return a3;
}

//----- (00404E20) --------------------------------------------------------
void *__cdecl sub_404E20(int a1, int a2, void *a3)
{
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    sub_404C30(a3, a1);
    a3 = (char *)a3 + 28;
    a1 += 28;
  }
  return a3;
}

//----- (00404EE0) --------------------------------------------------------
char *__cdecl sub_404EE0(char a1, char a2, void *Dst)
{
  return sub_405E90(a1, a2, Dst);
}

//----- (00404F00) --------------------------------------------------------
void *__cdecl sub_404F00(void *Src, int a2, int a3)
{
  rsize_t MaxCount; // [sp+0h] [bp-8h]@1
  void *Dst; // [sp+4h] [bp-4h]@1

  MaxCount = a2 - (_DWORD)Src;
  Dst = (void *)(a3 - (a2 - (_DWORD)Src));
  if ( a2 - (_DWORD)Src > 0 )
    memmove_s(Dst, MaxCount, Src, MaxCount);
  return Dst;
}

//----- (00404F40) --------------------------------------------------------
int __cdecl sub_404F40(int a1, int a2, int a3)
{
  char v4; // ST0C_1@1
  char v5; // [sp+3h] [bp-1h]@1
  char v6; // [sp+2h] [bp-2h]@1

  v5 = 0;
  v4 = *(_BYTE *)unknown_libname_18(&v6);
  return sub_405A90(a1, a2, a3);
}

//----- (00404F80) --------------------------------------------------------
void *__cdecl sub_404F80(char a1, char a2, void *a3)
{
  return sub_4045F0(a1, a2, a3);
}

//----- (00404FA0) --------------------------------------------------------
int __cdecl sub_404FA0(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 - 28 * (a2 - a1) / 28;
  v4 = sub_404570((int)&a3);
  sub_405AD0(a1, a2, v4);
  return v5;
}

//----- (00405000) --------------------------------------------------------
void *__cdecl sub_405000(char a1, char a2, void *a3)
{
  return sub_405B00(a1, a2, a3);
}

//----- (00405020) --------------------------------------------------------
int __cdecl sub_405020(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 - ((a2 - a1) >> 6 << 6);
  v4 = sub_404570((int)&a3);
  sub_405B60(a1, a2, v4);
  return v5;
}

//----- (00405080) --------------------------------------------------------
char *__cdecl sub_405080(void *Src, int a2, void *Dst)
{
  rsize_t MaxCount; // [sp+4h] [bp-4h]@1
  char *v5; // [sp+0h] [bp-8h]@1

  MaxCount = a2 - (_DWORD)Src;
  v5 = (char *)Dst + a2 - (_DWORD)Src;
  if ( a2 != (_DWORD)Src )
    memmove_s(Dst, MaxCount, Src, MaxCount);
  return v5;
}

//----- (004050C0) --------------------------------------------------------
int __cdecl sub_4050C0(void *a1, int a2)
{
  void *v3; // eax@1
  void *v4; // [sp+10h] [bp-10h]@1
  int v5; // [sp+8h] [bp-18h]@1
  int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+4h] [bp-1Ch]@2

  v4 = a1;
  v3 = operator new(0x1Cu, a1);
  v5 = (int)v3;
  v6 = 0;
  if ( v3 )
    v7 = sub_4036B0(v5, a2);
  else
    v7 = 0;
  return v7;
}

//----- (00405140) --------------------------------------------------------
void *__cdecl sub_405140(int a1)
{
  return sub_4051E0(a1, 0);
}

//----- (00405150) --------------------------------------------------------
int __cdecl sub_405150(void *a1, int a2)
{
  void *v3; // eax@1
  void *v4; // [sp+10h] [bp-10h]@1
  int v5; // [sp+8h] [bp-18h]@1
  int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+4h] [bp-1Ch]@2

  v4 = a1;
  v3 = operator new(0x40u, a1);
  v5 = (int)v3;
  v6 = 0;
  if ( v3 )
    v7 = sub_4036E0(v5, a2);
  else
    v7 = 0;
  return v7;
}

//----- (004051D0) --------------------------------------------------------
void *__cdecl sub_4051D0(int a1)
{
  return sub_405210(a1, 0);
}

//----- (004051E0) --------------------------------------------------------
void *__thiscall sub_4051E0(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42BCD0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00405210) --------------------------------------------------------
void *__thiscall sub_405210(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_42C3B0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00405240) --------------------------------------------------------
void *__thiscall sub_405240(int this, int a2, char a3, char a4, char a5, int a6)
{
  void *result; // eax@1
  int v7; // esi@3
  void *v8; // eax@11
  int v9; // eax@11
  int v10; // eax@11
  int v11; // [sp+0h] [bp-38h]@1
  int *v12; // [sp+28h] [bp-10h]@1
  int v13; // [sp+14h] [bp-24h]@1
  unsigned int v14; // [sp+24h] [bp-14h]@1
  int v15; // [sp+20h] [bp-18h]@1
  int v16; // [sp+10h] [bp-28h]@7
  void *v17; // [sp+18h] [bp-20h]@11
  void *Dst; // [sp+1Ch] [bp-1Ch]@11
  signed int v19; // [sp+34h] [bp-4h]@11

  v12 = &v11;
  v13 = this;
  v14 = 0;
  sub_405C30(a4, a5, (int)&v14);
  result = (void *)sub_401FE0(v13);
  v15 = (int)result;
  if ( v14 )
  {
    v7 = sub_402810();
    if ( v7 - sub_4019B0(v13) >= v14 )
    {
      if ( v15 >= v14 + sub_4019B0(v13) )
      {
        unknown_libname_7(a4, a5, *(void **)(v13 + 16));
        sub_405B90(a3, *(_DWORD *)(v13 + 16));
        sub_405B90(*(_DWORD *)(v13 + 16), v14 + *(_DWORD *)(v13 + 16));
        sub_405B90(a3, v14 + *(_DWORD *)(v13 + 16));
        result = (void *)v13;
        *(_DWORD *)(v13 + 16) += v14;
      }
      else
      {
        if ( sub_402810() - ((unsigned int)v15 >> 1) >= v15 )
          v16 = v15 + ((unsigned int)v15 >> 1);
        else
          v16 = 0;
        v15 = v16;
        if ( v15 < v14 + sub_4019B0(v13) )
          v15 = v14 + sub_4019B0(v13);
        v8 = (void *)std__allocator_char___allocate(v15);
        v17 = v8;
        Dst = v8;
        v19 = 0;
        v9 = unknown_libname_4(*(_DWORD *)(v13 + 12), a3, v8);
        Dst = (void *)v9;
        v10 = unknown_libname_7(a4, a5, (void *)v9);
        Dst = (void *)v10;
        unknown_libname_4(a3, *(_DWORD *)(v13 + 16), (void *)v10);
        v19 = -1;
        v14 += sub_4019B0(v13);
        if ( *(_DWORD *)(v13 + 12) )
        {
          sub_402200(*(_DWORD *)(v13 + 12), *(_DWORD *)(v13 + 16));
          unknown_libname_2(*(void **)(v13 + 12), *(_DWORD *)(v13 + 20) - *(_DWORD *)(v13 + 12));
        }
        *(_DWORD *)(v13 + 20) = (char *)v17 + v15;
        *(_DWORD *)(v13 + 16) = (char *)v17 + v14;
        result = v17;
        *(_DWORD *)(v13 + 12) = v17;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (004054C0) --------------------------------------------------------
void *__thiscall sub_4054C0(int this, int a2, char a3, char a4, int a5, char a6, int a7, int a8)
{
  void *result; // eax@1
  int v9; // esi@3
  void *v10; // eax@11
  int v11; // eax@11
  void *v12; // eax@11
  int v13; // [sp+0h] [bp-38h]@1
  int *v14; // [sp+28h] [bp-10h]@1
  int v15; // [sp+14h] [bp-24h]@1
  unsigned int v16; // [sp+24h] [bp-14h]@1
  int v17; // [sp+20h] [bp-18h]@1
  int v18; // [sp+10h] [bp-28h]@7
  void *Dst; // [sp+18h] [bp-20h]@11
  void *v20; // [sp+1Ch] [bp-1Ch]@11
  signed int v21; // [sp+34h] [bp-4h]@11

  v14 = &v13;
  v15 = this;
  v16 = 0;
  sub_405C90(a4, a5, a6, a7, (int)&v16);
  result = (void *)sub_401FE0(v15);
  v17 = (int)result;
  if ( v16 )
  {
    v9 = sub_402810();
    if ( v9 - sub_4019B0(v15) >= v16 )
    {
      if ( v17 >= v16 + sub_4019B0(v15) )
      {
        sub_404230(a4, a5, a6, a7, *(void **)(v15 + 16));
        sub_405B90(a3, *(_DWORD *)(v15 + 16));
        sub_405B90(*(_DWORD *)(v15 + 16), v16 + *(_DWORD *)(v15 + 16));
        sub_405B90(a3, v16 + *(_DWORD *)(v15 + 16));
        result = (void *)(v16 + *(_DWORD *)(v15 + 16));
        *(_DWORD *)(v15 + 16) = result;
      }
      else
      {
        if ( sub_402810() - ((unsigned int)v17 >> 1) >= v17 )
          v18 = v17 + ((unsigned int)v17 >> 1);
        else
          v18 = 0;
        v17 = v18;
        if ( v17 < v16 + sub_4019B0(v15) )
          v17 = v16 + sub_4019B0(v15);
        v10 = (void *)std__allocator_char___allocate(v17);
        Dst = v10;
        v20 = v10;
        v21 = 0;
        v11 = unknown_libname_4(*(_DWORD *)(v15 + 12), a3, v10);
        v20 = (void *)v11;
        v12 = sub_404230(a4, a5, a6, a7, (void *)v11);
        v20 = v12;
        unknown_libname_4(a3, *(_DWORD *)(v15 + 16), v12);
        v21 = -1;
        v16 += sub_4019B0(v15);
        if ( *(_DWORD *)(v15 + 12) )
        {
          sub_402200(*(_DWORD *)(v15 + 12), *(_DWORD *)(v15 + 16));
          unknown_libname_2(*(void **)(v15 + 12), *(_DWORD *)(v15 + 20) - *(_DWORD *)(v15 + 12));
        }
        *(_DWORD *)(v15 + 20) = (char *)Dst + v17;
        *(_DWORD *)(v15 + 16) = (char *)Dst + v16;
        result = Dst;
        *(_DWORD *)(v15 + 12) = Dst;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (00405750) --------------------------------------------------------
void *__thiscall sub_405750(int this, int a2, char a3, char a4, int a5, char a6, int a7, int a8)
{
  void *result; // eax@1
  int v9; // esi@3
  void *v10; // eax@11
  int v11; // eax@11
  int v12; // eax@11
  int v13; // [sp+0h] [bp-3Ch]@1
  int *v14; // [sp+2Ch] [bp-10h]@1
  int v15; // [sp+18h] [bp-24h]@1
  unsigned int v16; // [sp+28h] [bp-14h]@1
  int v17; // [sp+24h] [bp-18h]@1
  int v18; // [sp+14h] [bp-28h]@7
  void *Dst; // [sp+1Ch] [bp-20h]@11
  void *v20; // [sp+20h] [bp-1Ch]@11
  signed int v21; // [sp+38h] [bp-4h]@11
  int v22; // [sp+10h] [bp-2Ch]@11

  v14 = &v13;
  v15 = this;
  v16 = 0;
  sub_405CD0(a4, a5, a6, a7, (int)&v16);
  result = (void *)sub_401FE0(v15);
  v17 = (int)result;
  if ( v16 )
  {
    v9 = sub_4019B0(v15);
    if ( sub_402810() - v9 >= v16 )
    {
      if ( v17 >= v16 + sub_4019B0(v15) )
      {
        sub_405D10(a4, a5, a6, a7, *(_DWORD *)(v15 + 16));
        sub_405B90(a3, *(_DWORD *)(v15 + 16));
        sub_405B90(*(_DWORD *)(v15 + 16), v16 + *(_DWORD *)(v15 + 16));
        sub_405B90(a3, v16 + *(_DWORD *)(v15 + 16));
        result = (void *)(v16 + *(_DWORD *)(v15 + 16));
        *(_DWORD *)(v15 + 16) = result;
      }
      else
      {
        if ( sub_402810() - ((unsigned int)v17 >> 1) >= v17 )
          v18 = v17 + ((unsigned int)v17 >> 1);
        else
          v18 = 0;
        v17 = v18;
        if ( v17 < v16 + sub_4019B0(v15) )
          v17 = v16 + sub_4019B0(v15);
        v10 = (void *)std__allocator_char___allocate(v17);
        Dst = v10;
        v20 = v10;
        v21 = 0;
        v11 = unknown_libname_4(*(_DWORD *)(v15 + 12), a3, v10);
        v20 = (void *)v11;
        v12 = sub_405D10(a4, a5, a6, a7, v11);
        v22 = v12;
        v20 = (void *)v12;
        unknown_libname_4(a3, *(_DWORD *)(v15 + 16), (void *)v12);
        v21 = -1;
        v16 += sub_4019B0(v15);
        if ( *(_DWORD *)(v15 + 12) )
        {
          sub_402200(*(_DWORD *)(v15 + 12), *(_DWORD *)(v15 + 16));
          unknown_libname_2(*(void **)(v15 + 12), *(_DWORD *)(v15 + 20) - *(_DWORD *)(v15 + 12));
        }
        *(_DWORD *)(v15 + 20) = (char *)Dst + v17;
        *(_DWORD *)(v15 + 16) = (char *)Dst + v16;
        result = Dst;
        *(_DWORD *)(v15 + 12) = Dst;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (004059F0) --------------------------------------------------------
int __thiscall sub_4059F0(int this, int a2, int a3, int a4, int a5, char a6, int a7, char a8, int a9, int a10)
{
  int  s; // [sp+34h] [bp+0h]@1
  unsigned int v12; // [sp+24h] [bp-10h]@1
  int v13; // [sp+0h] [bp-34h]@1
  char v14; // [sp+8h] [bp-2Ch]@1
  signed int v15; // [sp+30h] [bp-4h]@1

  v12 = (unsigned int)& s ^ dword_43901C;
  v13 = this;
  sub_405D40((int)&v14, a6, a7, a8, a9);
  v15 = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char____replace(v13, a2, a3, a4, a5, &v14);
  v15 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
  return v13;
}

//----- (00405A90) --------------------------------------------------------
int __cdecl sub_405A90(int a1, int a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = a2;
  v6 = sub_404570((int)&a1);
  return sub_405DA0(v6, v5, v4);
}

//----- (00405AD0) --------------------------------------------------------
int __cdecl sub_405AD0(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 28;
    a3 -= 28;
    sub_404B80(a3, a2);
  }
  return a3;
}

//----- (00405B00) --------------------------------------------------------
void *__cdecl sub_405B00(char a1, char a2, void *a3)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_405DD0(v8, v7, v6);
}

//----- (00405B60) --------------------------------------------------------
int __cdecl sub_405B60(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 64;
    a3 -= 64;
    sub_404BB0(a3, a2);
  }
  return a3;
}

//----- (00405B90) --------------------------------------------------------
int __stdcall sub_405B90(int a1, int a2)
{
  int result; // eax@2
  char v3; // [sp+7h] [bp-1h]@3

  while ( a1 != a2 )
  {
    --a2;
    result = a1;
    if ( a1 == a2 )
      break;
    v3 = *(_BYTE *)a1;
    *(_BYTE *)a1 = *(_BYTE *)a2;
    *(_BYTE *)a2 = v3;
    result = a1++ + 1;
  }
  return result;
}

//----- (00405BE0) --------------------------------------------------------
int __thiscall sub_405BE0(int this, int a2)
{
  int v2; // edx@2
  int v3; // ecx@2
  char v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( *(_DWORD *)this != -4 )
  {
    v5 = sub_4010D0(v6);
    v3 = (unsigned __int8)v5;
    if ( !(unsigned __int8)v5 || !sub_4010B0(v6, a2) )
      invalid_parameter_noinfo(v3, v2);
  }
  return *(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4);
}

//----- (00405C30) --------------------------------------------------------
int __cdecl sub_405C30(int a1, int a2, int a3)
{
  char v4; // ST0C_1@1
  char v5; // [sp+1h] [bp-1h]@1

  v4 = *(_BYTE *)unknown_libname_18(&v5);
  return sub_415010(a1, a2, a3);
}

//----- (00405C90) --------------------------------------------------------
int __cdecl sub_405C90(char a1, int a2, char a3, int a4, int a5)
{
  char v6; // ST14_1@1
  char v7; // [sp+1h] [bp-1h]@1

  v6 = *(_BYTE *)unknown_libname_18(&v7);
  return sub_405EF0(a1, a2, a3, a4, a5);
}

//----- (00405CD0) --------------------------------------------------------
int __cdecl sub_405CD0(char a1, int a2, char a3, int a4, int a5)
{
  char v6; // ST14_1@1
  char v7; // [sp+1h] [bp-1h]@1

  v6 = *(_BYTE *)unknown_libname_18(&v7);
  return sub_405F10(a1, a2, a3, a4, a5);
}

//----- (00405D10) --------------------------------------------------------
int __stdcall sub_405D10(char a1, int a2, char a3, int a4, int a5)
{
  return sub_405F30(a1, a2, a3, a4, a5);
}

//----- (00405D40) --------------------------------------------------------
int __thiscall sub_405D40(int this, char a2, int a3, char a4, int a5)
{
  int v6; // [sp+0h] [bp-Ch]@1
  int v7; // [sp-4h] [bp-10h]@1
  char v8; // [sp+7h] [bp-5h]@1
  unsigned __int8 v9; // [sp+6h] [bp-6h]@1

  v6 = this;
  std__allocator_char___allocator_char_(&v7, this);
  std___String_val_char_std__allocator_char_____String_val_char_std__allocator_char__(v6);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____Tidy(v6, 0, 0);
  unknown_libname_18(&v8);
  sub_405F90(v6, a2, a3, a4, a5, v9);
  return v6;
}

//----- (00405DA0) --------------------------------------------------------
int __cdecl sub_405DA0(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a2 )
  {
    *(_BYTE *)a1 = *(_BYTE *)a3;
    result = a2-- - 1;
    ++a1;
  }
  return result;
}

//----- (00405DD0) --------------------------------------------------------
void *__cdecl sub_405DD0(int a1, int a2, void *a3)
{
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    sub_404C70(a3, a1);
    a3 = (char *)a3 + 64;
    a1 += 64;
  }
  return a3;
}

//----- (00405E90) --------------------------------------------------------
char *__cdecl sub_405E90(char a1, char a2, void *Dst)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = Dst;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_405080((void *)v8, v7, v6);
}

//----- (00405EF0) --------------------------------------------------------
int __cdecl sub_405EF0(char a1, int a2, char a3, int a4, int a5)
{
  int result; // eax@1

  result = *(_DWORD *)a5 + sub_4060B0((int)&a3, (int)&a1);
  *(_DWORD *)a5 = result;
  return result;
}

//----- (00405F10) --------------------------------------------------------
int __cdecl sub_405F10(char a1, int a2, char a3, int a4, int a5)
{
  int result; // eax@1

  result = *(_DWORD *)a5 + sub_4060D0((int)&a3, (int)&a1);
  *(_DWORD *)a5 = result;
  return result;
}

//----- (00405F30) --------------------------------------------------------
int __cdecl sub_405F30(char a1, int a2, char a3, int a4, int a5)
{
  char v7; // al@1
  int v8; // ST08_4@1
  int v9; // ST04_4@1
  int v10; // eax@1
  char v11; // [sp+3h] [bp-1h]@1

  v11 = 0;
  v7 = unknown_libname_17();
  v8 = a5;
  v9 = sub_406200();
  v10 = sub_406200();
  return sub_406220(v10, v9, v8);
}

//----- (00405F90) --------------------------------------------------------
bool __thiscall sub_405F90(int this, char a2, int a3, char a4, int a5, int a6)
{
  bool result; // eax@2
  int v7; // eax@3
  int v8; // [sp+0h] [bp-28h]@1
  int *v9; // [sp+18h] [bp-10h]@1
  int v10; // [sp+10h] [bp-18h]@1
  int v11; // [sp+14h] [bp-14h]@1
  int v12; // [sp+24h] [bp-4h]@1

  v9 = &v8;
  v10 = this;
  v11 = 0;
  sub_405C90(a2, a3, a4, a5, (int)&v11);
  std__basic_string_char_std__char_traits_char__std__allocator_char____reserve(v10, v11);
  v12 = 0;
  while ( 1 )
  {
    result = sub_40EA30((int)&a2, (int)&a4);
    if ( !result )
      break;
    v7 = sub_406070((int)&a2);
    std__basic_string_char_std__char_traits_char__std__allocator_char____append(v10, 1, *(_BYTE *)v7);
    sub_406090((int)&a2);
  }
  return result;
}

//----- (00406070) --------------------------------------------------------
int __fastcall sub_406070(int a1)
{
  return sub_406100(a1);
}

//----- (00406090) --------------------------------------------------------
int __fastcall sub_406090(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_406150(a1);
  return v2;
}

//----- (004060B0) --------------------------------------------------------
int __thiscall sub_4060B0(int this, int a2)
{
  return sub_4061B0(this, a2);
}

//----- (004060D0) --------------------------------------------------------
int __thiscall sub_4060D0(int this, int a2)
{
  int v3; // edx@1
  int v4; // [sp+0h] [bp-Ch]@1
  int v5; // [sp+4h] [bp-8h]@1
  int v6; // [sp+8h] [bp-4h]@1

  v4 = this;
  v3 = *(_DWORD *)(this + 4);
  v5 = *(_DWORD *)this;
  v6 = v3;
  return sub_405BE0((int)&v5, a2);
}

//----- (00406100) --------------------------------------------------------
int __fastcall sub_406100(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  unsigned int v3; // ecx@3
  int v5; // eax@3
  int v6; // [sp+0h] [bp-4h]@1

  v6 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  v5 = sub_401080(v6);
  v3 = *(_DWORD *)(v6 + 4);
  if ( v3 >= *(_DWORD *)(v5 + 16) )
    invalid_parameter_noinfo(v3, v6);
  return *(_DWORD *)(v6 + 4);
}

//----- (00406150) --------------------------------------------------------
int __fastcall sub_406150(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  unsigned int v3; // ecx@3
  int v5; // eax@3
  int v6; // [sp+0h] [bp-4h]@1

  v6 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  v5 = sub_401080(v6);
  v3 = *(_DWORD *)(v6 + 4);
  if ( v3 >= *(_DWORD *)(v5 + 16) )
    invalid_parameter_noinfo(v3, v6);
  ++*(_DWORD *)(v6 + 4);
  return v6;
}

//----- (004061B0) --------------------------------------------------------
int __thiscall sub_4061B0(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4);
}

//----- (00406200) --------------------------------------------------------
int __cdecl sub_406200()
{
  return sub_415080();
}

//----- (00406220) --------------------------------------------------------
int __cdecl sub_406220(int a1, int a2, int a3)
{
  int v5; // [sp+0h] [bp-28h]@1
  int *v6; // [sp+18h] [bp-10h]@1
  int v7; // [sp+14h] [bp-14h]@1
  int v8; // [sp+24h] [bp-4h]@1
  char v9; // [sp+13h] [bp-15h]@3

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    v9 = *(_BYTE *)a1;
    sub_4062F0((void *)a3++, &v9);
    ++a1;
  }
  return a3;
}

//----- (004062F0) --------------------------------------------------------
void *__stdcall sub_4062F0(void *a1, void *a2)
{
  return sub_406310(a1, a2);
}

//----- (00406310) --------------------------------------------------------
void *__cdecl sub_406310(void *a1, void *a2)
{
  void *result; // eax@1
  void *v3; // [sp+4h] [bp-8h]@1

  result = operator new(1u, a1);
  v3 = result;
  if ( result )
  {
    result = a2;
    *(_BYTE *)v3 = *(_BYTE *)a2;
  }
  return result;
}

//----- (00406350) --------------------------------------------------------
int __thiscall sub_406350(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_401180(this, a2);
  *(_DWORD *)v3 = &off_433204;
  return v3;
}

//----- (00406380) --------------------------------------------------------
int __fastcall sub_406380(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_433204;
  return sub_4011F0(v2);
}

//----- (004063A0) --------------------------------------------------------
void *__thiscall sub_4063A0(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_406380(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00406400) --------------------------------------------------------
#error "40643C: call analysis failed (funcsize=109)"

//----- (004065D0) --------------------------------------------------------
#error "40660C: call analysis failed (funcsize=265)"

//----- (00406A70) --------------------------------------------------------
int __thiscall sub_406A70(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(this + 416);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00406AE0) --------------------------------------------------------
int __thiscall sub_406AE0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(this + 536);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00406B50) --------------------------------------------------------
int __thiscall sub_406B50(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
  int v10; // [sp+4h] [bp-14h]@1

  v10 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(this + 564);
  *(_DWORD *)(v10 + 592) = a9;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00406BC0) --------------------------------------------------------
int __thiscall sub_406BC0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, char a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24)
{
  int v25; // [sp+4h] [bp-14h]@1

  v25 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(this + 444);
  *(_DWORD *)(v25 + 472) = a9;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v25 + 476);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v25 + 504);
  *(_DWORD *)(v25 + 532) = a24;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a10);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a17);
}

//----- (00406C80) --------------------------------------------------------
#error "406CBF: call analysis failed (funcsize=51)"

//----- (00406D30) --------------------------------------------------------
int __thiscall sub_406D30(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, __int16 a17, char a18, void *a19, void *a20)
{
  int ST0C_4_0; // ST0C_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int v23; // ST10_4@1
  int v25; // ST10_4@1
  int v26; // ST0C_4@1
  int v27; // ST14_4@1
  int v28; // ST18_4@1
  signed int v29; // [sp+14h] [bp-4h]@1

  v29 = 1;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    this + 12,
    ST0C_4_0,
    this,
    ST14_4_0,
    ST18_4_0);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v25 + 40,
    v26,
    v25,
    v27,
    v28);
  LOBYTE(v29) = 3;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v23 + 12);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v23 + 40);
  *(_DWORD *)(v23 + 76) = a16;
  *(_WORD *)(v23 + 80) = a17;
  if ( a19 )
    memcpy((void *)(v23 + 68), a19, 4u);
  else
    memset((void *)(v23 + 68), 0, 4u);
  if ( a20 )
  {
    memcpy((void *)(v23 + 72), a20, 4u);
  }
  else
  {
    memset((void *)(v23 + 72), 255, 4u);
    *(_BYTE *)(v23 + 75) = 0;
  }
  *(_BYTE *)(v23 + 82) = a18;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  return v23;
}

//----- (00406E60) --------------------------------------------------------
int __stdcall sub_406E60(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24)
{
  return sub_4070B0((int)&a1);
}

//----- (00406E80) --------------------------------------------------------
int __thiscall sub_406E80(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15)
{
  int v16; // [sp+4h] [bp-14h]@1

  v16 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
}

//----- (00406EE0) --------------------------------------------------------
int __thiscall sub_406EE0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16)
{
  int v17; // [sp+4h] [bp-14h]@1

  v17 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
}

//----- (00406F40) --------------------------------------------------------
int __stdcall sub_406F40(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a1);
}

//----- (00406F60) --------------------------------------------------------
int __stdcall sub_406F60(char a1, int a2, int a3, int a4, int a5, int a6, int a7)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a1);
}

//----- (00406F80) --------------------------------------------------------
int __thiscall sub_406F80(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, char a17, int a18, int a19, int a20, int a21, int a22, int a23)
{
  int v24; // [sp+4h] [bp-14h]@1

  v24 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a10);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a17);
}

//----- (00406FF0) --------------------------------------------------------
int __stdcall sub_406FF0(int a1, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00407010) --------------------------------------------------------
int __stdcall sub_407010(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24, int a25)
{
  return sub_4070B0((int)&a1);
}

//----- (00407030) --------------------------------------------------------
int __stdcall sub_407030(int a1, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00407050) --------------------------------------------------------
int __stdcall sub_407050(char a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a1);
}

//----- (00407070) --------------------------------------------------------
int __thiscall setNetworkTimeout(int this, int a2)
{
  int result; // eax@1

  result = this;
  *(_DWORD *)(this + 764) = a2;
  return result;
}

//----- (00407090) --------------------------------------------------------
int __fastcall sub_407090(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return *(_DWORD *)(a1 + 764);
}

//----- (004070B0) --------------------------------------------------------
int __fastcall sub_4070B0(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 40);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 12);
}

//----- (00407110) --------------------------------------------------------
int __thiscall sub_407110(int this, char a2, __int16 a3)
{
  int v4; // [sp+4h] [bp-10h]@1

  v4 = this;
  sub_401700(this + 4);
  sub_401990(v4 + 4, 1u);
  *(_BYTE *)sub_4019D0(v4 + 4, 0) = a2;
  *(_WORD *)v4 = a3;
  return v4;
}

//----- (00407190) --------------------------------------------------------
void *__thiscall sub_407190(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_421F30(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (004071C0) --------------------------------------------------------
int __fastcall sub_4071C0(int a1)
{
  return sub_408D80(a1);
}

//----- (004071E0) --------------------------------------------------------
int __fastcall sub_4071E0(int a1)
{
  return sub_408FA0(a1);
}

//----- (00407200) --------------------------------------------------------
int __fastcall sub_407200(int a1)
{
  return sub_4090D0(a1);
}

//----- (00407220) --------------------------------------------------------
int __fastcall sub_407220(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_409390(a1);
  return v2;
}

//----- (00407240) --------------------------------------------------------
void *__thiscall sub_407240(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_407270(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00407270) --------------------------------------------------------
int __fastcall sub_407270(int a1)
{
  return sub_409400(a1);
}

//----- (00407290) --------------------------------------------------------
int __thiscall sub_407290(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(this);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 28);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 56);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 84);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 112);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 140);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 168);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 196);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 224);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 252);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 280);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 308);
  *(_WORD *)(v3 + 336) = *(_WORD *)(a2 + 336);
  *(_BYTE *)(v3 + 338) = *(_BYTE *)(a2 + 338);
  *(_BYTE *)(v3 + 339) = *(_BYTE *)(a2 + 339);
  *(_BYTE *)(v3 + 340) = *(_BYTE *)(a2 + 340);
  *(_BYTE *)(v3 + 341) = *(_BYTE *)(a2 + 341);
  *(_BYTE *)(v3 + 342) = *(_BYTE *)(a2 + 342);
  *(_WORD *)(v3 + 344) = *(_WORD *)(a2 + 344);
  *(_BYTE *)(v3 + 346) = *(_BYTE *)(a2 + 346);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 348);
  *(_WORD *)(v3 + 376) = *(_WORD *)(a2 + 376);
  *(_BYTE *)(v3 + 378) = *(_BYTE *)(a2 + 378);
  *(_BYTE *)(v3 + 379) = *(_BYTE *)(a2 + 379);
  *(_BYTE *)(v3 + 380) = *(_BYTE *)(a2 + 380);
  *(_BYTE *)(v3 + 381) = *(_BYTE *)(a2 + 381);
  *(_BYTE *)(v3 + 382) = *(_BYTE *)(a2 + 382);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 384);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 412);
  *(_WORD *)(v3 + 440) = *(_WORD *)(a2 + 440);
  *(_BYTE *)(v3 + 442) = *(_BYTE *)(a2 + 442);
  *(_BYTE *)(v3 + 443) = *(_BYTE *)(a2 + 443);
  *(_WORD *)(v3 + 444) = *(_WORD *)(a2 + 444);
  sub_408280(v3 + 448, a2 + 448);
  *(_BYTE *)(v3 + 472) = *(_BYTE *)(a2 + 472);
  *(_WORD *)(v3 + 474) = *(_WORD *)(a2 + 474);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 476);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 504);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 532);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 560);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 588);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 616);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 644);
  *(_WORD *)(v3 + 672) = *(_WORD *)(a2 + 672);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 676);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 704);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 732);
  *(_WORD *)(v3 + 760) = *(_WORD *)(a2 + 760);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 764);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 792);
  *(_WORD *)(v3 + 820) = *(_WORD *)(a2 + 820);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 824);
  *(_WORD *)(v3 + 852) = *(_WORD *)(a2 + 852);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 856);
  *(_WORD *)(v3 + 884) = *(_WORD *)(a2 + 884);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 888);
  *(_WORD *)(v3 + 916) = *(_WORD *)(a2 + 916);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 920);
  *(_WORD *)(v3 + 948) = *(_WORD *)(a2 + 948);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 952);
  *(_WORD *)(v3 + 980) = *(_WORD *)(a2 + 980);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 984);
  *(_WORD *)(v3 + 1012) = *(_WORD *)(a2 + 1012);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 1016);
  *(_WORD *)(v3 + 1044) = *(_WORD *)(a2 + 1044);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 1048);
  *(_WORD *)(v3 + 1076) = *(_WORD *)(a2 + 1076);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 1080);
  *(_WORD *)(v3 + 1108) = *(_WORD *)(a2 + 1108);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 1112);
  *(_WORD *)(v3 + 1140) = *(_WORD *)(a2 + 1140);
  *(_WORD *)(v3 + 1142) = *(_WORD *)(a2 + 1142);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 1144);
  *(_BYTE *)(v3 + 1172) = *(_BYTE *)(a2 + 1172);
  return v3;
}

//----- (004078E0) --------------------------------------------------------
int __fastcall sub_4078E0(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 340);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 312);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 284);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 256);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 228);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 196);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 168);
  sub_4017F0(v2 + 128);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 60);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 28);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2);
}

//----- (004079E0) --------------------------------------------------------
int __thiscall sub_4079E0(int this, int a2)
{
  int v3; // eax@1
  int v4; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v4 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  v5 = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 28);
  LOBYTE(v5) = 1;
  *(_WORD *)(v4 + 56) = *(_WORD *)(a2 + 56);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 60);
  LOBYTE(v5) = 2;
  *(_WORD *)(v4 + 88) = *(_WORD *)(a2 + 88);
  *(_BYTE *)(v4 + 90) = *(_BYTE *)(a2 + 90);
  *(_DWORD *)(v4 + 92) = *(_DWORD *)(a2 + 92);
  *(_DWORD *)(v4 + 96) = *(_DWORD *)(a2 + 96);
  *(_DWORD *)(v4 + 100) = *(_DWORD *)(a2 + 100);
  *(_BYTE *)(v4 + 104) = *(_BYTE *)(a2 + 104);
  *(_WORD *)(v4 + 106) = *(_WORD *)(a2 + 106);
  *(_BYTE *)(v4 + 108) = *(_BYTE *)(a2 + 108);
  v3 = a2 + 109;
  *(_DWORD *)(v4 + 109) = *(_DWORD *)(a2 + 109);
  *(_DWORD *)(v4 + 113) = *(_DWORD *)(v3 + 4);
  *(_DWORD *)(v4 + 117) = *(_DWORD *)(v3 + 8);
  *(_DWORD *)(v4 + 121) = *(_DWORD *)(v3 + 12);
  sub_4037A0(v4 + 128, a2 + 128);
  LOBYTE(v5) = 3;
  *(_DWORD *)(v4 + 152) = *(_DWORD *)(a2 + 152);
  *(_DWORD *)(v4 + 156) = *(_DWORD *)(a2 + 156);
  *(_BYTE *)(v4 + 160) = *(_BYTE *)(a2 + 160);
  *(_DWORD *)(v4 + 164) = *(_DWORD *)(a2 + 164);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 168);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 196);
  LOBYTE(v5) = 5;
  *(_BYTE *)(v4 + 224) = *(_BYTE *)(a2 + 224);
  *(_BYTE *)(v4 + 225) = *(_BYTE *)(a2 + 225);
  *(_BYTE *)(v4 + 226) = *(_BYTE *)(a2 + 226);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 228);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 256);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 284);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 312);
  LOBYTE(v5) = 9;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 340);
  *(_DWORD *)(v4 + 368) = *(_DWORD *)(a2 + 368);
  *(_DWORD *)(v4 + 372) = *(_DWORD *)(a2 + 372);
  *(_DWORD *)(v4 + 376) = *(_DWORD *)(a2 + 376);
  return v4;
}

//----- (00407C90) --------------------------------------------------------
int __thiscall sub_407C90(int this, int a2)
{
  int v3; // [sp+0h] [bp-8h]@1
  unsigned int v4; // [sp+4h] [bp-4h]@1

  v3 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(this);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 28);
  *(_WORD *)(v3 + 56) = *(_WORD *)(a2 + 56);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 60);
  *(_WORD *)(v3 + 88) = *(_WORD *)(a2 + 88);
  *(_BYTE *)(v3 + 90) = *(_BYTE *)(a2 + 90);
  *(_DWORD *)(v3 + 92) = *(_DWORD *)(a2 + 92);
  *(_DWORD *)(v3 + 96) = *(_DWORD *)(a2 + 96);
  *(_DWORD *)(v3 + 100) = *(_DWORD *)(a2 + 100);
  *(_BYTE *)(v3 + 104) = *(_BYTE *)(a2 + 104);
  *(_WORD *)(v3 + 106) = *(_WORD *)(a2 + 106);
  *(_BYTE *)(v3 + 108) = *(_BYTE *)(a2 + 108);
  v4 = 0;
  while ( v4 < 0x10 )
  {
    *(_BYTE *)(v4 + v3 + 109) = *(_BYTE *)(v4 + a2 + 109);
    ++v4;
  }
  sub_401810(v3 + 128, a2 + 128);
  *(_DWORD *)(v3 + 152) = *(_DWORD *)(a2 + 152);
  *(_DWORD *)(v3 + 156) = *(_DWORD *)(a2 + 156);
  *(_BYTE *)(v3 + 160) = *(_BYTE *)(a2 + 160);
  *(_DWORD *)(v3 + 164) = *(_DWORD *)(a2 + 164);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 168);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 196);
  *(_BYTE *)(v3 + 224) = *(_BYTE *)(a2 + 224);
  *(_BYTE *)(v3 + 225) = *(_BYTE *)(a2 + 225);
  *(_BYTE *)(v3 + 226) = *(_BYTE *)(a2 + 226);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 228);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 256);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 284);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 312);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 340);
  *(_DWORD *)(v3 + 368) = *(_DWORD *)(a2 + 368);
  *(_DWORD *)(v3 + 372) = *(_DWORD *)(a2 + 372);
  *(_DWORD *)(v3 + 376) = *(_DWORD *)(a2 + 376);
  return v3;
}

//----- (00407EF0) --------------------------------------------------------
#error "407EFD: call analysis failed (funcsize=11)"

//----- (00407F10) --------------------------------------------------------
int __fastcall sub_407F10(int a1)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 4);
}

//----- (00407F30) --------------------------------------------------------
int __thiscall sub_407F30(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 4);
  return v3;
}

//----- (00407F60) --------------------------------------------------------
int __thiscall sub_407F60(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  *(_WORD *)(v3 + 2) = *(_WORD *)(a2 + 2);
  *(_WORD *)(v3 + 4) = *(_WORD *)(a2 + 4);
  *(_DWORD *)(v3 + 8) = *(_DWORD *)(a2 + 8);
  sub_401810(v3 + 12, a2 + 12);
  return v3;
}

//----- (00407FC0) --------------------------------------------------------
int __thiscall sub_407FC0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v3 + 4);
  return v3;
}

//----- (00407FF0) --------------------------------------------------------
int __thiscall sub_407FF0(int this, int a2)
{
  int v3; // eax@1
  int v4; // ecx@1
  int v5; // edx@1
  int v6; // [sp+4h] [bp-10h]@1
  int v7; // [sp+10h] [bp-4h]@1

  v6 = this;
  v3 = this;
  v4 = a2;
  *(_DWORD *)v3 = *(_DWORD *)a2;
  *(_DWORD *)(v3 + 4) = *(_DWORD *)(v4 + 4);
  *(_BYTE *)(v6 + 8) = *(_BYTE *)(a2 + 8);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 12);
  v7 = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 40);
  *(_DWORD *)(v6 + 68) = *(_DWORD *)(a2 + 68);
  *(_DWORD *)(v6 + 72) = *(_DWORD *)(a2 + 72);
  *(_DWORD *)(v6 + 76) = *(_DWORD *)(a2 + 76);
  *(_WORD *)(v6 + 80) = *(_WORD *)(a2 + 80);
  *(_BYTE *)(v6 + 82) = *(_BYTE *)(a2 + 82);
  v5 = a2;
  *(_DWORD *)(v6 + 88) = *(_DWORD *)(a2 + 88);
  *(_DWORD *)(v6 + 92) = *(_DWORD *)(v5 + 92);
  return v6;
}

//----- (004080D0) --------------------------------------------------------
int __fastcall sub_4080D0(int a1)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1);
}

//----- (004080F0) --------------------------------------------------------
int __fastcall sub_4080F0(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 112);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 84);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 56);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 28);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2);
}

//----- (00408180) --------------------------------------------------------
bool __fastcall sub_408180(int a1)
{
  return sub_4019B0(a1) == 0;
}

//----- (004081A0) --------------------------------------------------------
int __thiscall sub_4081A0(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_4019B0(this);
  if ( v3 >= (unsigned int)sub_401FE0(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_409A70(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_402B50(*(_DWORD *)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00408220) --------------------------------------------------------
int __fastcall sub_408220(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_409D00(a1);
  return sub_401F20(v2);
}

//----- (00408280) --------------------------------------------------------
int __thiscall sub_408280(int this, int a2)
{
  int v3; // esi@4
  int v4; // eax@5
  int v5; // esi@6
  int v6; // eax@10
  int v7; // [sp+4h] [bp-Ch]@1
  int v8; // [sp+Ch] [bp-4h]@5
  int v9; // [sp+8h] [bp-8h]@7

  v7 = this;
  if ( this != a2 )
  {
    if ( sub_408830(a2) )
    {
      v3 = sub_408830(a2);
      if ( v3 > (unsigned int)sub_408830(v7) )
      {
        v5 = sub_408830(a2);
        if ( v5 > (unsigned int)sub_409AF0(v7) )
        {
          if ( *(_DWORD *)(v7 + 12) )
          {
            sub_409CD0(*(_DWORD *)(v7 + 12), *(_DWORD *)(v7 + 16));
            unknown_libname_2(*(void **)(v7 + 12), (*(_DWORD *)(v7 + 20) - *(_DWORD *)(v7 + 12)) >> 5);
          }
          v6 = sub_408830(a2);
          if ( sub_409C50(v7, v6) )
            *(_DWORD *)(v7 + 16) = unknown_libname_9(*(_DWORD *)(a2 + 12), *(_DWORD *)(a2 + 16), *(_DWORD *)(v7 + 12));
        }
        else
        {
          v9 = *(_DWORD *)(a2 + 12) + 32 * sub_408830(v7);
          sub_412890(*(_DWORD *)(a2 + 12), v9, *(_DWORD *)(v7 + 12));
          *(_DWORD *)(v7 + 16) = unknown_libname_9(v9, *(_DWORD *)(a2 + 16), *(_DWORD *)(v7 + 16));
        }
      }
      else
      {
        v4 = sub_412890(*(_DWORD *)(a2 + 12), *(_DWORD *)(a2 + 16), *(_DWORD *)(v7 + 12));
        v8 = v4;
        sub_409CD0(v4, *(_DWORD *)(v7 + 16));
        *(_DWORD *)(v7 + 16) = *(_DWORD *)(v7 + 12) + 32 * sub_408830(a2);
      }
    }
    else
    {
      sub_408480(v7);
    }
  }
  return v7;
}

//----- (00408400) --------------------------------------------------------
int __thiscall sub_408400(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_408830(this);
  if ( v3 >= (unsigned int)sub_409AF0(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_409B30(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_409D70(*(void **)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00408480) --------------------------------------------------------
int __fastcall sub_408480(int a1)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // eax@1
  unsigned int v5; // edx@1
  int v6; // [sp+0h] [bp-2Ch]@1
  char v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+24h] [bp-8h]@1
  unsigned int v9; // [sp+28h] [bp-4h]@1
  char v10; // [sp+Ch] [bp-20h]@1
  int v11; // [sp+14h] [bp-18h]@1
  unsigned int v12; // [sp+18h] [bp-14h]@1
  char v13; // [sp+4h] [bp-28h]@1

  v6 = a1;
  v2 = sub_40EB60(a1, (int)&v7);
  v3 = *(_DWORD *)(v2 + 4);
  v8 = *(_DWORD *)v2;
  v9 = v3;
  v4 = sub_402FA0(v6, (int)&v10);
  v5 = *(_DWORD *)(v4 + 4);
  v11 = *(_DWORD *)v4;
  v12 = v5;
  return sub_409BB0(v6, (int)&v13, v11, v5, v8, v9);
}

//----- (004084E0) --------------------------------------------------------
int __fastcall sub_4084E0(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_409F10(v3, 0);
  return v3;
}

//----- (00408550) --------------------------------------------------------
int __fastcall sub_408550(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_409FD0(a1);
  return sub_401F20(v2);
}

//----- (004085B0) --------------------------------------------------------
int __fastcall sub_4085B0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12)) / 380;
}

//----- (004085D0) --------------------------------------------------------
int __thiscall sub_4085D0(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_4085B0(this) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v5 + 12) + 380 * a2;
}

//----- (00408610) --------------------------------------------------------
int __thiscall sub_408610(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_4085B0(this);
  if ( v3 >= (unsigned int)sub_409DB0(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_409DF0(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_40A050(*(void **)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00408690) --------------------------------------------------------
int __thiscall sub_408690(int this, int a2, int a3, unsigned int a4)
{
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  sub_412930((_BYTE)a4 + 124, *(_DWORD *)(this + 16), a4);
  sub_409FA0(*(_DWORD *)(v5 + 16) - 380, *(_DWORD *)(v5 + 16));
  *(_DWORD *)(v5 + 16) -= 380;
  sub_411D50(v5, a2, a3, a4);
  return a2;
}

//----- (00408700) --------------------------------------------------------
int __fastcall sub_408700(int a1)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // eax@1
  unsigned int v5; // edx@1
  int v6; // [sp+0h] [bp-2Ch]@1
  char v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+24h] [bp-8h]@1
  unsigned int v9; // [sp+28h] [bp-4h]@1
  char v10; // [sp+Ch] [bp-20h]@1
  int v11; // [sp+14h] [bp-18h]@1
  unsigned int v12; // [sp+18h] [bp-14h]@1
  char v13; // [sp+4h] [bp-28h]@1

  v6 = a1;
  v2 = sub_40EB60(a1, (int)&v7);
  v3 = *(_DWORD *)(v2 + 4);
  v8 = *(_DWORD *)v2;
  v9 = v3;
  v4 = sub_402FA0(v6, (int)&v10);
  v5 = *(_DWORD *)(v4 + 4);
  v11 = *(_DWORD *)v4;
  v12 = v5;
  return sub_409E70(v6, (int)&v13, v11, v5, v8, v9);
}

//----- (00408760) --------------------------------------------------------
int __fastcall sub_408760(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_409C50(v3, 0);
  return v3;
}

//----- (004087D0) --------------------------------------------------------
int __fastcall sub_4087D0(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_40A1F0(a1);
  return sub_401F20(v2);
}

//----- (00408830) --------------------------------------------------------
int __fastcall sub_408830(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12)) >> 5;
}

//----- (00408850) --------------------------------------------------------
int __thiscall sub_408850(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_408830(this) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v5 + 12) + 32 * a2;
}

//----- (00408880) --------------------------------------------------------
int __thiscall sub_408880(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_408830(this);
  if ( v3 >= (unsigned int)sub_409AF0(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_40A0A0(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_40A260(*(void **)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00408900) --------------------------------------------------------
int __thiscall sub_408900(int this, int a2, int a3, unsigned int a4)
{
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  sub_4129A0((_BYTE)a4 + 32, *(_DWORD *)(this + 16), a4);
  sub_40A1C0(*(_DWORD *)(v5 + 16) - 32, *(_DWORD *)(v5 + 16));
  *(_DWORD *)(v5 + 16) -= 32;
  sub_411D50(v5, a2, a3, a4);
  return a2;
}

//----- (00408970) --------------------------------------------------------
int __fastcall sub_408970(int a1)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // eax@1
  unsigned int v5; // edx@1
  int v6; // [sp+0h] [bp-2Ch]@1
  char v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+24h] [bp-8h]@1
  unsigned int v9; // [sp+28h] [bp-4h]@1
  char v10; // [sp+Ch] [bp-20h]@1
  int v11; // [sp+14h] [bp-18h]@1
  unsigned int v12; // [sp+18h] [bp-14h]@1
  char v13; // [sp+4h] [bp-28h]@1

  v6 = a1;
  v2 = sub_40EB60(a1, (int)&v7);
  v3 = *(_DWORD *)(v2 + 4);
  v8 = *(_DWORD *)v2;
  v9 = v3;
  v4 = sub_402FA0(v6, (int)&v10);
  v5 = *(_DWORD *)(v4 + 4);
  v11 = *(_DWORD *)v4;
  v12 = v5;
  return sub_40A120(v6, (int)&v13, v11, v5, v8, v9);
}

//----- (004089D0) --------------------------------------------------------
int __fastcall sub_4089D0(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_40A400(v3, 0);
  return v3;
}

//----- (00408A40) --------------------------------------------------------
int __fastcall sub_408A40(int a1)
{
  void **v2; // [sp+0h] [bp-4h]@1

  v2 = (void **)a1;
  sub_40A480(a1);
  return sub_401F20(v2);
}

//----- (00408A60) --------------------------------------------------------
int __fastcall sub_408A60(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12)) >> 2;
}

//----- (00408A80) --------------------------------------------------------
int __thiscall sub_408A80(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_408A60(this) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v5 + 12) + 4 * a2;
}

//----- (00408AB0) --------------------------------------------------------
int __thiscall sub_408AB0(int this, void **a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_408A60(this);
  if ( v3 >= (unsigned int)sub_40A2A0(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_40A2E0(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_40A4F0(*(void **)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00408B30) --------------------------------------------------------
int __fastcall sub_408B30(int a1)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // eax@1
  unsigned int v5; // edx@1
  int v6; // [sp+0h] [bp-2Ch]@1
  char v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+24h] [bp-8h]@1
  unsigned int v9; // [sp+28h] [bp-4h]@1
  char v10; // [sp+Ch] [bp-20h]@1
  int v11; // [sp+14h] [bp-18h]@1
  unsigned int v12; // [sp+18h] [bp-14h]@1
  char v13; // [sp+4h] [bp-28h]@1

  v6 = a1;
  v2 = sub_40EB60(a1, (int)&v7);
  v3 = *(_DWORD *)(v2 + 4);
  v8 = *(_DWORD *)v2;
  v9 = v3;
  v4 = sub_402FA0(v6, (int)&v10);
  v5 = *(_DWORD *)(v4 + 4);
  v11 = *(_DWORD *)v4;
  v12 = v5;
  return sub_40A360(v6, (int)&v13, v11, v5, v8, v9);
}

//----- (00408B90) --------------------------------------------------------
int __fastcall sub_408B90(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_40A690(v3, 0);
  return v3;
}

//----- (00408C00) --------------------------------------------------------
int __fastcall sub_408C00(int a1)
{
  void **v2; // [sp+0h] [bp-4h]@1

  v2 = (void **)a1;
  sub_40A710(a1);
  return sub_401F20(v2);
}

//----- (00408C20) --------------------------------------------------------
int __fastcall sub_408C20(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12)) >> 1;
}

//----- (00408C40) --------------------------------------------------------
int __thiscall sub_408C40(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_408C20(this) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v5 + 12) + 2 * a2;
}

//----- (00408C70) --------------------------------------------------------
int __thiscall sub_408C70(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_408C20(this);
  if ( v3 >= (unsigned int)sub_40A530(v6) )
  {
    v4 = sub_40EB60(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_40A570(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_40A780(*(_DWORD *)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00408CF0) --------------------------------------------------------
int __fastcall sub_408CF0(int a1)
{
  int v2; // eax@1
  unsigned int v3; // edx@1
  int v4; // eax@1
  unsigned int v5; // edx@1
  int v6; // [sp+0h] [bp-2Ch]@1
  char v7; // [sp+1Ch] [bp-10h]@1
  int v8; // [sp+24h] [bp-8h]@1
  unsigned int v9; // [sp+28h] [bp-4h]@1
  char v10; // [sp+Ch] [bp-20h]@1
  int v11; // [sp+14h] [bp-18h]@1
  unsigned int v12; // [sp+18h] [bp-14h]@1
  char v13; // [sp+4h] [bp-28h]@1

  v6 = a1;
  v2 = sub_40EB60(a1, (int)&v7);
  v3 = *(_DWORD *)(v2 + 4);
  v8 = *(_DWORD *)v2;
  v9 = v3;
  v4 = sub_402FA0(v6, (int)&v10);
  v5 = *(_DWORD *)(v4 + 4);
  v11 = *(_DWORD *)v4;
  v12 = v5;
  return sub_40A5F0(v6, (int)&v13, v11, v5, v8, v9);
}

//----- (00408D50) --------------------------------------------------------
int __fastcall sub_408D50(int a1)
{
  int v2; // eax@1
  int v3; // [sp+0h] [bp-8h]@1
  char v4; // [sp+6h] [bp-2h]@1

  v3 = a1;
  v2 = _LocaleUpdate__GetLocaleT();
  sub_40A7C0(v3, (int *)&v4, v2);
  return v3;
}

//----- (00408D80) --------------------------------------------------------
int __fastcall sub_408D80(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_40A830(a1);
  return sub_409A10(v2);
}

//----- (00408DE0) --------------------------------------------------------
int __thiscall sub_408DE0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_40B870(a2, *(_DWORD *)(this + 24), this);
  return a2;
}

//----- (00408E10) --------------------------------------------------------
int __fastcall sub_408E10(int a1)
{
  int v2; // eax@1
  int v3; // [sp+0h] [bp-8h]@1
  char v4; // [sp+6h] [bp-2h]@1

  v3 = a1;
  v2 = _LocaleUpdate__GetLocaleT();
  sub_40A940(v3, (int *)&v4, v2);
  return v3;
}

//----- (00408E40) --------------------------------------------------------
int __thiscall sub_408E40(int this, int a2)
{
  int v3; // eax@1
  int v4; // eax@2
  int v5; // eax@2
  int v6; // eax@3
  int v7; // eax@3
  int v8; // eax@3
  int v9; // edx@3
  int v10; // [sp+14h] [bp-97Ch]@1
  int v11; // [sp+97Ch] [bp-14h]@1
  char v12; // [sp+974h] [bp-1Ch]@1
  int v13; // [sp+20h] [bp-970h]@3
  int v14; // [sp+980h] [bp-10h]@3
  int v15; // [sp+24h] [bp-96Ch]@3
  int v16; // [sp+10h] [bp-980h]@3
  int v17; // [sp+Ch] [bp-984h]@3
  signed int v18; // [sp+98Ch] [bp-4h]@3
  char v19; // [sp+4C0h] [bp-4D0h]@3
  int v20; // [sp+8h] [bp-988h]@3
  int v21; // [sp+4h] [bp-98Ch]@3
  char v22; // [sp+18h] [bp-978h]@3
  char v23; // [sp+28h] [bp-968h]@3

  v10 = this;
  sub_40AFD0(this, (int)&v11, a2);
  v3 = sub_408DE0(v10, (int)&v12);
  if ( sub_411B90((int)&v11, v3) || (v4 = sub_415300(), v5 = sub_40A920(v4), (unsigned __int8)sub_40A900(a2, v5)) )
  {
    v13 = v11;
    v15 = v14;
    v6 = sub_4065D0();
    v16 = v6;
    v17 = v6;
    v18 = 0;
    v7 = sub_40B890((int)&v19, a2, v6);
    v20 = v7;
    v21 = v7;
    LOBYTE(v18) = 1;
    v8 = sub_40A9B0(v10, (int)&v22, v13, v15, v7);
    v9 = *(_DWORD *)(v8 + 4);
    v11 = *(_DWORD *)v8;
    v14 = v9;
    LOBYTE(v18) = 0;
    sub_4099B0((int)&v19);
    v18 = -1;
    sub_4096A0((int)&v23);
  }
  return sub_4094B0((int)&v11) + 28;
}

//----- (00408FA0) --------------------------------------------------------
int __fastcall sub_408FA0(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_40B000(a1);
  return sub_409A10(v2);
}

//----- (00409000) --------------------------------------------------------
int __thiscall sub_409000(int this, int a2, int a3)
{
  int v4; // eax@1
  int v5; // eax@2
  int v6; // eax@2
  int v7; // edx@5
  int v8; // [sp+4h] [bp-20h]@1
  char v9; // [sp+1Ch] [bp-8h]@1
  char v10; // [sp+10h] [bp-14h]@1
  int v11; // [sp+0h] [bp-24h]@3
  char v12; // [sp+8h] [bp-1Ch]@4
  int v13; // [sp+18h] [bp-Ch]@5

  v8 = this;
  sub_40AFD0(this, (int)&v9, a3);
  v4 = sub_408DE0(v8, (int)&v10);
  if ( sub_411B90((int)&v9, v4) || (v5 = sub_415300(), v6 = sub_40A920(v5), (unsigned __int8)sub_40A900(a3, v6)) )
    v11 = sub_408DE0(v8, (int)&v12);
  else
    v11 = (int)&v9;
  v13 = v11;
  v7 = *(_DWORD *)(v11 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v11;
  *(_DWORD *)(a2 + 4) = v7;
  return a2;
}

//----- (004090A0) --------------------------------------------------------
int __fastcall sub_4090A0(int a1)
{
  int v2; // eax@1
  int v3; // [sp+0h] [bp-8h]@1
  char v4; // [sp+6h] [bp-2h]@1

  v3 = a1;
  v2 = _LocaleUpdate__GetLocaleT();
  sub_40B100(v3, (int *)&v4, v2);
  return v3;
}

//----- (004090D0) --------------------------------------------------------
int __fastcall sub_4090D0(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_40B670(a1);
  return sub_409A10(v2);
}

//----- (00409130) --------------------------------------------------------
int __thiscall sub_409130(int this, int a2, int a3)
{
  int result; // eax@8
  int v4; // ST10_4@3
  int v5; // eax@3
  char v6; // al@3
  int v8; // eax@11
  int v9; // eax@12
  int v10; // ST10_4@14
  int v11; // eax@14
  int v12; // eax@14
  int v13; // eax@15
  int v14; // [sp+4h] [bp-48h]@1
  int v15; // [sp+40h] [bp-Ch]@1
  int v16; // [sp+44h] [bp-8h]@1
  char v17; // [sp+4Bh] [bp-1h]@1
  int v18; // [sp+0h] [bp-4Ch]@4
  char v19; // [sp+38h] [bp-14h]@7
  char v22; // [sp+24h] [bp-28h]@11
  char v23; // [sp+23h] [bp-29h]@12
  char v24; // [sp+18h] [bp-34h]@12
  char v25; // [sp+17h] [bp-35h]@15
  char v26; // [sp+Ch] [bp-40h]@15
  char v27; // [sp+Bh] [bp-41h]@16

  v14 = this;
  v15 = *(_DWORD *)sub_410A70(this);
  v16 = *(_DWORD *)(v14 + 24);
  v17 = 1;
  while ( !*(_BYTE *)sub_40B0D0(v15) )
  {
    v16 = v15;
    v4 = sub_40A920(v15);
    v5 = sub_40B0E0(a3);
    v6 = sub_40B740(v14 + 8, v5, v4);
    v17 = v6;
    if ( v6 )
      v18 = *(_DWORD *)sub_40B0E0(v15);
    else
      v18 = *(_DWORD *)sub_40B0F0(v15);
    v15 = v18;
  }
  sub_40B870((int)&v19, v16, v14);
  if ( v17 )
  {
    v8 = sub_40DB10(v14, (int)&v22);
    if ( sub_411B90((int)&v19, v8) )
    {
      v23 = 1;
      v9 = sub_40B1F0(v14, (int)&v24, 1, v16, a3);
      sub_40B920(a2, v9, (int)&v23);
      return a2;
    }
    sub_40B950((int)&v19);
  }
  v10 = sub_40B0E0(a3);
  v11 = sub_415300();
  v12 = sub_40A920(v11);
  if ( sub_40B740(v14 + 8, v12, v10) )
  {
    v25 = 1;
    v13 = sub_40B1F0(v14, (int)&v26, v17, v16, a3);
    sub_40B920(a2, v13, (int)&v25);
    result = a2;
  }
  else
  {
    v27 = 0;
    sub_40B920(a2, (int)&v19, (int)&v27);
    result = a2;
  }
  return result;
}

//----- (00409300) --------------------------------------------------------
int __fastcall sub_409300(int a1)
{
  int result; // eax@1
  int v2; // eax@1
  int v3; // [sp+0h] [bp-4h]@1

  v3 = a1;
  v2 = sub_410A70(a1);
  sub_40B170(v3, *(void **)v2);
  *(_DWORD *)sub_410A70(v3) = *(_DWORD *)(v3 + 24);
  *(_DWORD *)(v3 + 28) = 0;
  *(_DWORD *)sub_40FC70(v3) = *(_DWORD *)(v3 + 24);
  result = sub_40DA80(v3);
  *(_DWORD *)result = *(_DWORD *)(v3 + 24);
  return result;
}

//----- (00409360) --------------------------------------------------------
int __thiscall sub_409360(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_4025E0(this) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v5 + 12) + (a2 << 6);
}

//----- (00409390) --------------------------------------------------------
int __fastcall sub_409390(int a1)
{
  char v2; // ST00_1@1
  int v3; // [sp+4h] [bp-14h]@1
  char *v4; // [sp+8h] [bp-10h]@1
  int v5; // [sp+14h] [bp-4h]@1

  v3 = a1;
  v2 = a1;
  v4 = &v2;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v3, v2);
  v5 = 0;
  sub_40B770(v3, 0);
  return v3;
}

//----- (00409400) --------------------------------------------------------
int __fastcall sub_409400(int a1)
{
  void **v2; // [sp+0h] [bp-4h]@1

  v2 = (void **)a1;
  sub_40B7F0(a1);
  return sub_401F20(v2);
}

//----- (00409420) --------------------------------------------------------
int __fastcall sub_409420(int a1)
{
  return sub_4094B0(a1);
}

//----- (00409440) --------------------------------------------------------
int __thiscall sub_409440(int this, int a2, int a3)
{
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  *(_BYTE *)(v4 + 28) = *(_BYTE *)a3;
  return v4;
}

//----- (00409470) --------------------------------------------------------
int __thiscall sub_409470(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_40B900((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (004094B0) --------------------------------------------------------
int __fastcall sub_4094B0(int a1)
{
  return sub_40B970(a1);
}

//----- (004094D0) --------------------------------------------------------
int __fastcall sub_4094D0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_40B9C0(a1);
  return v2;
}

//----- (004094F0) --------------------------------------------------------
int __thiscall sub_4094F0(int this, unsigned int a2, int a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+4h] [bp-14h]@1
  char *v6; // [sp+8h] [bp-10h]@1
  int v7; // [sp+14h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v5, v4);
  v7 = 0;
  sub_40B9E0(v5, a2, a3);
  return v5;
}

//----- (00409560) --------------------------------------------------------
int __fastcall sub_409560(int a1)
{
  void **v2; // [sp+4h] [bp-10h]@1

  v2 = (void **)a1;
  sub_40BB90(a1);
  return sub_401F20(v2);
}

//----- (004095C0) --------------------------------------------------------
int __thiscall sub_4095C0(int this, unsigned int a2)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  char v10; // ST04_1@1
  int v11; // ST08_4@1
  int v12; // ST0C_4@1
  int v13; // ST10_4@1
  int v14; // [sp+4h] [bp-8h]@1
  int *v15; // [sp+8h] [bp-4h]@1
  int v16; // [sp+0h] [bp-Ch]@1

  v14 = this;
  v15 = &ST04_4_0;
  v16 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
          &ST04_4_0,
          ST04_4_0,
          ST08_4_0,
          ST0C_4_0,
          ST10_4_0);
  return sub_40BA90(v14, a2, v10, v11, v12, v13, ST14_4_0, ST18_4_0, ST1C_4_0);
}

//----- (004095F0) --------------------------------------------------------
int __fastcall sub_4095F0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12)) / 28;
}

//----- (00409610) --------------------------------------------------------
int __thiscall sub_409610(int this, int a2, int a3)
{
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  *(_WORD *)this = *(_WORD *)a2;
  *(_WORD *)(v4 + 2) = *(_WORD *)a3;
  return v4;
}

//----- (00409640) --------------------------------------------------------
int __fastcall sub_409640(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  sub_4080F0(a1 + 28);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2);
}

//----- (004096A0) --------------------------------------------------------
int __fastcall sub_4096A0(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 1144);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 1112);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 1080);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 1048);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 1016);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 984);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 952);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 920);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 888);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 856);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 824);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 792);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 764);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 732);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 704);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 676);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 644);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 616);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 588);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 560);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 532);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 504);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 476);
  sub_408220(v2 + 448);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 412);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 384);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 348);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 308);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 280);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 252);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 224);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 196);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 168);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 140);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 112);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 84);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 56);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 28);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2);
}

//----- (004099B0) --------------------------------------------------------
int __fastcall sub_4099B0(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  sub_4096A0(a1 + 28);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2);
}

//----- (00409A10) --------------------------------------------------------
int __thiscall sub_409A10(void **this)
{
  return sub_409A30(this);
}

//----- (00409A30) --------------------------------------------------------
int __thiscall sub_409A30(void **this)
{
  return sub_409A50(this);
}

//----- (00409A50) --------------------------------------------------------
int __thiscall sub_409A50(void **this)
{
  return sub_401F20(this);
}

//----- (00409A70) --------------------------------------------------------
int __thiscall sub_409A70(int this, int a2, int a3, char a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_4019B0(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_4061B0((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_402830(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_401EE0(v9, v8, v7);
  return a2;
}

//----- (00409AF0) --------------------------------------------------------
int __fastcall sub_409AF0(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 5;
  else
    v3 = 0;
  return v3;
}

//----- (00409B30) --------------------------------------------------------
int __thiscall sub_409B30(int this, int a2, int a3, int a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_408830(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_40F130((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_40C580(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_40F0F0(v9, v8, v7);
  return a2;
}

//----- (00409BB0) --------------------------------------------------------
int __thiscall sub_409BB0(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  int v12; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = sub_412890(v11, *(_DWORD *)(v8 + 16), v12);
    v13 = v7;
    sub_409CD0(v7, *(_DWORD *)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = v12;
  return a2;
}

//----- (00409C50) --------------------------------------------------------
char __thiscall sub_409C50(int this, unsigned int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_40CE50() >= a2 )
    {
      *(_DWORD *)(v3 + 12) = sub_40D200(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12) + 32 * a2;
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00409CD0) --------------------------------------------------------
int __stdcall sub_409CD0(int a1, int a2)
{
  return sub_412A10(a1, a2);
}

//----- (00409D00) --------------------------------------------------------
int __fastcall sub_409D00(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_409CD0(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 5);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (00409D70) --------------------------------------------------------
int __stdcall sub_409D70(void *a1, int a2, int a3)
{
  sub_412A50(a1, a2, a3);
  return (int)((char *)a1 + 32 * a2);
}

//----- (00409DB0) --------------------------------------------------------
int __fastcall sub_409DB0(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) / 380;
  else
    v3 = 0;
  return v3;
}

//----- (00409DF0) --------------------------------------------------------
int __thiscall sub_409DF0(int this, int a2, int a3, int a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_4085B0(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_40E9E0((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_40C9B0(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_409470(v9, v8, v7);
  return a2;
}

//----- (00409E70) --------------------------------------------------------
int __thiscall sub_409E70(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  int v12; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = sub_412930(v11, *(_DWORD *)(v8 + 16), v12);
    v13 = v7;
    sub_409FA0(v7, *(_DWORD *)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = v12;
  return a2;
}

//----- (00409F10) --------------------------------------------------------
char __thiscall sub_409F10(int this, unsigned int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_40C990() >= a2 )
    {
      *(_DWORD *)(v3 + 12) = sub_40CE30(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12) + 380 * a2;
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00409FA0) --------------------------------------------------------
int __stdcall sub_409FA0(int a1, int a2)
{
  return sub_412AA0(a1, a2);
}

//----- (00409FD0) --------------------------------------------------------
int __fastcall sub_409FD0(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_409FA0(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) / 380);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (0040A050) --------------------------------------------------------
int __stdcall sub_40A050(void *a1, int a2, int a3)
{
  sub_412AE0(a1, a2, a3);
  return (int)((char *)a1 + 380 * a2);
}

//----- (0040A0A0) --------------------------------------------------------
int __thiscall sub_40A0A0(int this, int a2, int a3, int a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_408830(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_40F130((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_40CE70(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_40F0F0(v9, v8, v7);
  return a2;
}

//----- (0040A120) --------------------------------------------------------
int __thiscall sub_40A120(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  int v12; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = sub_4129A0(v11, *(_DWORD *)(v8 + 16), v12);
    v13 = v7;
    sub_40A1C0(v7, *(_DWORD *)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = v12;
  return a2;
}

//----- (0040A1C0) --------------------------------------------------------
int __stdcall sub_40A1C0(int a1, int a2)
{
  return sub_412B30(a1, a2);
}

//----- (0040A1F0) --------------------------------------------------------
int __fastcall sub_40A1F0(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_40A1C0(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 5);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (0040A260) --------------------------------------------------------
int __stdcall sub_40A260(void *a1, int a2, int a3)
{
  sub_412B70(a1, a2, a3);
  return (int)((char *)a1 + 32 * a2);
}

//----- (0040A2A0) --------------------------------------------------------
int __fastcall sub_40A2A0(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 2;
  else
    v3 = 0;
  return v3;
}

//----- (0040A2E0) --------------------------------------------------------
int __thiscall sub_40A2E0(int this, int a2, int a3, int a4, void **a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_408A60(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_40F1C0((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_40D270(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_40F180(v9, v8, v7);
  return a2;
}

//----- (0040A360) --------------------------------------------------------
int __thiscall sub_40A360(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  int v12; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = sub_412BC0(v11, *(_DWORD *)(v8 + 16), v12);
    v13 = v7;
    sub_40D240(v7, *(_DWORD *)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = v12;
  return a2;
}

//----- (0040A400) --------------------------------------------------------
char __thiscall sub_40A400(int this, unsigned int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_40D220() >= a2 )
    {
      *(_DWORD *)(v3 + 12) = sub_4038C0(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12) + 4 * a2;
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0040A480) --------------------------------------------------------
int __fastcall sub_40A480(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_40D240(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 2);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (0040A4F0) --------------------------------------------------------
int __stdcall sub_40A4F0(void *a1, int a2, void **a3)
{
  sub_412C30(a1, a2, a3);
  return (int)((char *)a1 + 4 * a2);
}

//----- (0040A530) --------------------------------------------------------
int __fastcall sub_40A530(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 1;
  else
    v3 = 0;
  return v3;
}

//----- (0040A570) --------------------------------------------------------
int __thiscall sub_40A570(int this, int a2, int a3, char a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_408C20(this) )
  {
    v6 = sub_402FA0(v10, (int)&v12);
    v11 = sub_40F250((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_40D5E0(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_402FA0(v10, (int)&v14);
  sub_40F210(v9, v8, v7);
  return a2;
}

//----- (0040A5F0) --------------------------------------------------------
int __thiscall sub_40A5F0(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  void *Dst; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = (int)sub_412C80(v11, *(_DWORD *)(v8 + 16), Dst);
    v13 = v7;
    sub_402200(v7, *(_DWORD *)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = Dst;
  return a2;
}

//----- (0040A690) --------------------------------------------------------
char __thiscall sub_40A690(int this, int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_40D5C0() >= (unsigned int)a2 )
    {
      *(_DWORD *)(v3 + 12) = sub_40D930(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12) + 2 * a2;
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0040A710) --------------------------------------------------------
int __fastcall sub_40A710(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_402200(*(_DWORD *)(v2 + 12), *(_DWORD *)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) >> 1);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (0040A780) --------------------------------------------------------
int __stdcall sub_40A780(int a1, int a2, int a3)
{
  sub_412CF0(a1, a2, a3);
  return a1 + 2 * a2;
}

//----- (0040A7C0) --------------------------------------------------------
int __thiscall sub_40A7C0(int this, int *a2, int a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+4h] [bp-14h]@1
  char *v6; // [sp+8h] [bp-10h]@1
  int v7; // [sp+14h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  std___Init_locks__operator_(a3);
  sub_40DAA0(v5, a2, v4);
  v7 = 0;
  sub_40DA10(v5);
  return v5;
}

//----- (0040A830) --------------------------------------------------------
int __fastcall sub_40A830(int a1)
{
  int result; // eax@1
  int v2; // eax@1
  int v3; // edx@1
  int v4; // eax@1
  int v5; // edx@1
  int v6; // eax@1
  int v7; // eax@1
  int v8; // eax@1
  int v9; // [sp+0h] [bp-2Ch]@1
  char v10; // [sp+1Ch] [bp-10h]@1
  int v11; // [sp+24h] [bp-8h]@1
  int v12; // [sp+28h] [bp-4h]@1
  char v13; // [sp+Ch] [bp-20h]@1
  int v14; // [sp+14h] [bp-18h]@1
  int v15; // [sp+18h] [bp-14h]@1
  char v16; // [sp+4h] [bp-28h]@1

  v9 = a1;
  v2 = sub_408DE0(a1, (int)&v10);
  v3 = *(_DWORD *)(v2 + 4);
  v11 = *(_DWORD *)v2;
  v12 = v3;
  v4 = sub_40DB10(v9, (int)&v13);
  v5 = *(_DWORD *)(v4 + 4);
  v14 = *(_DWORD *)v4;
  v15 = v5;
  sub_40D960(v9, (int)&v16, v14, v5, v11, v12);
  v6 = sub_40B0E0(*(_DWORD *)(v9 + 24));
  sub_40E800(v6);
  v7 = sub_40E370(*(_DWORD *)(v9 + 24));
  sub_40E800(v7);
  v8 = sub_40B0F0(*(_DWORD *)(v9 + 24));
  sub_40E800(v8);
  result = unknown_libname_2(*(void **)(v9 + 24), 1);
  *(_DWORD *)(v9 + 24) = 0;
  *(_DWORD *)(v9 + 28) = 0;
  return result;
}

//----- (0040A900) --------------------------------------------------------
int __stdcall sub_40A900(int a1, int a2)
{
  return std__operator__char_std__char_traits_char__std__allocator_char__(a1, a2);
}

//----- (0040A920) --------------------------------------------------------
int __cdecl sub_40A920(int a1)
{
  int v2; // eax@1

  v2 = sub_40DB00(a1);
  return sub_40B0E0(v2);
}

//----- (0040A940) --------------------------------------------------------
int __thiscall sub_40A940(int this, int *a2, int a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+4h] [bp-14h]@1
  char *v6; // [sp+8h] [bp-10h]@1
  int v7; // [sp+14h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  std___Init_locks__operator_(a3);
  sub_40DAA0(v5, a2, v4);
  v7 = 0;
  sub_40DDE0(v5);
  return v5;
}

//----- (0040A9B0) --------------------------------------------------------
int __thiscall sub_40A9B0(int this, int a2, int a3, int a4, int a5)
{
  int result; // eax@2
  int v44; // eax@24
  int v45; // eax@25
  int v46; // ST0C_4@25
  int v47; // eax@25
  int v48; // ST0C_4@26
  int v49; // eax@26
  int v50; // eax@28
  int v51; // ST0C_4@29
  int v52; // eax@29
  int v53; // eax@29
  int v54; // ST0C_4@30
  int v55; // eax@30
  int v56; // eax@32
  int v57; // ST0C_4@32
  int v58; // eax@32
  int v59; // ST0C_4@33
  int v60; // eax@33
  int v61; // eax@33
  int v62; // eax@34
  int v63; // eax@34
  int v64; // ST0C_4@35
  int v65; // eax@35
  int v66; // ST0C_4@36
  int v67; // eax@36
  int v68; // ST0C_4@37
  int v69; // eax@37
  int v70; // eax@37
  int v71; // ST0C_4@38
  int v72; // eax@38
  int v73; // eax@39
  int v74; // ST0C_4@39
  int v75; // eax@39
  int v76; // eax@40
  int v77; // eax@40
  int v78; // ST0C_4@41
  int v79; // eax@41
  int v80; // ST0C_4@42
  int v81; // eax@42
  int v82; // eax@43
  int v83; // edx@43
  int v84; // [sp+0h] [bp-48h]@1
  int v85; // [sp+40h] [bp-8h]@1
  int v88; // [sp+44h] [bp-4h]@13
  char v90; // [sp+20h] [bp-28h]@24
  char v91; // [sp+18h] [bp-30h]@28
  char v92; // [sp+10h] [bp-38h]@38
  char v93; // [sp+4h] [bp-44h]@43

  v84 = this;
  sub_40E8F0((int)&v85);
  if ( !std___Mpunct_wchar_t___do_frac_digits() )
  {
    sub_40DE50(v84, a2, 1, *(_DWORD *)(v84 + 24), a5);
    return a2;
  }
  v44 = sub_40DB10(v84, (int)&v90);
  if ( sub_411B90((int)&a3, v44) )
  {
    v45 = sub_415300();
    v46 = sub_40A920(v45);
    v47 = sub_40B0E0(a5);
    if ( (unsigned __int8)sub_40A900(v47, v46) )
    {
      v48 = a5;
      v49 = sub_415300();
      sub_40DE50(v84, a2, 1, v49, v48);
      return a2;
    }
    goto LABEL_43;
  }
  v50 = sub_408DE0(v84, (int)&v91);
  if ( sub_411B90((int)&a3, v50) )
  {
    v51 = sub_40B0E0(a5);
    v52 = sub_40DA80(v84);
    v53 = sub_40A920(*(_DWORD *)v52);
    if ( (unsigned __int8)sub_40A900(v53, v51) )
    {
      v54 = a5;
      v55 = sub_40DA80(v84);
      sub_40DE50(v84, a2, 0, *(_DWORD *)v55, v54);
      return a2;
    }
    goto LABEL_43;
  }
  v56 = sub_415300();
  v57 = sub_40A920(v56);
  v58 = sub_40B0E0(a5);
  if ( (unsigned __int8)sub_40A900(v58, v57)
    && (v85 = a3, v88 = a4, v59 = sub_40B0E0(a5), sub_40E930((int)&v85), v60 = sub_415300(), v61 = sub_40A920(v60), (unsigned __int8)sub_40A900(v61, v59)) )
  {
    v62 = sub_415300();
    v63 = sub_40B0F0(v62);
    if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v63) )
    {
      v64 = a5;
      v65 = sub_415300();
      sub_40DE50(v84, a2, 0, v65, v64);
      result = a2;
    }
    else
    {
      v66 = a5;
      v67 = sub_415300();
      sub_40DE50(v84, a2, 1, v67, v66);
      result = a2;
    }
  }
  else
  {
    v68 = sub_40B0E0(a5);
    v69 = sub_415300();
    v70 = sub_40A920(v69);
    if ( !(unsigned __int8)sub_40A900(v70, v68)
      || (v85 = a3, v88 = a4, v71 = sub_408DE0(v84, (int)&v92), v72 = sub_40E910((int)&v85), !(unsigned __int8)sub_411B90(v72, v71))
      && (v73 = sub_415300(), v74 = sub_40A920(v73), v75 = sub_40B0E0(a5), !(unsigned __int8)sub_40A900(v75, v74)) )
    {
LABEL_43:
      v82 = sub_40DB60(v84, (int)&v93, a5);
      v83 = *(_DWORD *)(v82 + 4);
      *(_DWORD *)a2 = *(_DWORD *)v82;
      *(_DWORD *)(a2 + 4) = v83;
      return a2;
    }
    v76 = sub_415300();
    v77 = sub_40B0F0(v76);
    if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v77) )
    {
      v78 = a5;
      v79 = sub_415300();
      sub_40DE50(v84, a2, 0, v79, v78);
      result = a2;
    }
    else
    {
      v80 = a5;
      v81 = sub_415300();
      sub_40DE50(v84, a2, 1, v81, v80);
      result = a2;
    }
  }
  return result;
}

//----- (0040AFD0) --------------------------------------------------------
int __thiscall sub_40AFD0(int this, int a2, int a3)
{
  int v4; // ST04_4@1
  int v5; // eax@1

  v4 = this;
  v5 = sub_40E2D0(this, a3);
  sub_40B870(a2, v5, v4);
  return a2;
}

//----- (0040B000) --------------------------------------------------------
int __fastcall sub_40B000(int a1)
{
  int result; // eax@1
  int v2; // eax@1
  int v3; // edx@1
  int v4; // eax@1
  int v5; // edx@1
  int v6; // eax@1
  int v7; // eax@1
  int v8; // eax@1
  int v9; // [sp+0h] [bp-2Ch]@1
  char v10; // [sp+1Ch] [bp-10h]@1
  int v11; // [sp+24h] [bp-8h]@1
  int v12; // [sp+28h] [bp-4h]@1
  char v13; // [sp+Ch] [bp-20h]@1
  int v14; // [sp+14h] [bp-18h]@1
  int v15; // [sp+18h] [bp-14h]@1
  char v16; // [sp+4h] [bp-28h]@1

  v9 = a1;
  v2 = sub_408DE0(a1, (int)&v10);
  v3 = *(_DWORD *)(v2 + 4);
  v11 = *(_DWORD *)v2;
  v12 = v3;
  v4 = sub_40DB10(v9, (int)&v13);
  v5 = *(_DWORD *)(v4 + 4);
  v14 = *(_DWORD *)v4;
  v15 = v5;
  sub_40DD30(v9, (int)&v16, v14, v5, v11, v12);
  v6 = sub_40B0E0(*(_DWORD *)(v9 + 24));
  sub_40E800(v6);
  v7 = sub_40E370(*(_DWORD *)(v9 + 24));
  sub_40E800(v7);
  v8 = sub_40B0F0(*(_DWORD *)(v9 + 24));
  sub_40E800(v8);
  result = unknown_libname_2(*(void **)(v9 + 24), 1);
  *(_DWORD *)(v9 + 24) = 0;
  *(_DWORD *)(v9 + 28) = 0;
  return result;
}

//----- (0040B0D0) --------------------------------------------------------
int __cdecl sub_40B0D0(int a1)
{
  return a1 + 15;
}

//----- (0040B0E0) --------------------------------------------------------
int __cdecl sub_40B0E0(int a1)
{
  return a1;
}

//----- (0040B0F0) --------------------------------------------------------
int __cdecl sub_40B0F0(int a1)
{
  return a1 + 8;
}

//----- (0040B100) --------------------------------------------------------
int __thiscall sub_40B100(int this, int *a2, int a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+4h] [bp-14h]@1
  char *v6; // [sp+8h] [bp-10h]@1
  int v7; // [sp+14h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  std___Init_locks__operator_(a3);
  sub_40DAA0(v5, a2, v4);
  v7 = 0;
  sub_40E450(v5);
  return v5;
}

//----- (0040B170) --------------------------------------------------------
int __thiscall sub_40B170(int this, void *a2)
{
  int result; // eax@2
  int v3; // eax@3
  int v4; // [sp+0h] [bp-8h]@1
  void *v5; // [sp+4h] [bp-4h]@1

  v4 = this;
  v5 = a2;
  while ( 1 )
  {
    result = *(_BYTE *)sub_40B0D0((int)v5);
    if ( result )
      break;
    v3 = sub_40B0F0((int)v5);
    sub_40B170(*(void **)v3);
    v5 = *(void **)sub_40B0E0((int)v5);
    sub_40E800((int)a2);
    unknown_libname_2(a2, 1);
    a2 = v5;
  }
  return result;
}

//----- (0040B1F0) --------------------------------------------------------
int __thiscall sub_40B1F0(int this, int a2, char a3, int a4, int a5)
{
  int v6; // eax@12
  int v7; // esi@13
  int v8; // eax@13
  int v9; // eax@13
  int v10; // eax@14
  int v11; // eax@14
  int v12; // eax@15
  int v13; // eax@15
  int v14; // eax@15
  int v15; // eax@15
  int v16; // eax@16
  int v17; // eax@17
  int v18; // eax@18
  int v19; // eax@18
  int v20; // eax@18
  int v21; // eax@18
  int v22; // eax@18
  int v23; // eax@20
  int v24; // eax@20
  int v25; // eax@21
  int v26; // eax@21
  int v27; // eax@21
  int v28; // eax@21
  int v29; // eax@22
  int v30; // eax@23
  int v31; // eax@24
  int v32; // eax@24
  int v33; // eax@24
  int v34; // eax@24
  int v35; // eax@24
  int v36; // eax@26
  int v37; // [sp+8h] [bp-5Ch]@1
  char v38; // [sp+Ch] [bp-58h]@2
  signed int v39; // [sp+60h] [bp-4h]@2
  char v40; // [sp+28h] [bp-3Ch]@2
  int v41; // [sp+54h] [bp-10h]@3
  int v42; // [sp+50h] [bp-14h]@11

  v37 = this;
  if ( (unsigned int)(sub_40E380() - 1) <= *(_DWORD *)(v37 + 28) )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v38);
    v39 = 0;
    sub_401270((int)&v40, (int)&v38);
    CxxThrowException(&v40, &unk_433D88);
    v39 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v38);
  }
  v41 = (int)sub_40E720(v37, *(_DWORD *)(v37 + 24), a4, *(_DWORD *)(v37 + 24), a5, 0);
  ++*(_DWORD *)(v37 + 28);
  if ( a4 == *(_DWORD *)(v37 + 24) )
  {
    *(_DWORD *)sub_410A70(v37) = v41;
    *(_DWORD *)sub_40FC70(v37) = v41;
    *(_DWORD *)sub_40DA80(v37) = v41;
  }
  else
  {
    if ( a3 )
    {
      *(_DWORD *)sub_40B0E0(a4) = v41;
      if ( a4 == *(_DWORD *)sub_40FC70(v37) )
        *(_DWORD *)sub_40FC70(v37) = v41;
    }
    else
    {
      *(_DWORD *)sub_40B0F0(a4) = v41;
      if ( a4 == *(_DWORD *)sub_40DA80(v37) )
        *(_DWORD *)sub_40DA80(v37) = v41;
    }
  }
  v42 = v41;
  while ( 1 )
  {
    v6 = sub_40E370(v42);
    if ( *(_BYTE *)sub_40E360(*(_DWORD *)v6) )
      break;
    v7 = sub_40E370(v42);
    v8 = sub_40E370(v42);
    v9 = sub_40E370(*(_DWORD *)v8);
    if ( *(_DWORD *)v7 == *(_DWORD *)sub_40B0E0(*(_DWORD *)v9) )
    {
      v10 = sub_40E370(v42);
      v11 = sub_40E370(*(_DWORD *)v10);
      a4 = *(_DWORD *)sub_40B0F0(*(_DWORD *)v11);
      if ( *(_BYTE *)sub_40E360(a4) )
      {
        v16 = sub_40E370(v42);
        if ( v42 == *(_DWORD *)sub_40B0F0(*(_DWORD *)v16) )
        {
          v17 = *(_DWORD *)sub_40E370(v42);
          v42 = v17;
          sub_40E4C0(v37, v17);
        }
        v18 = sub_40E370(v42);
        *(_BYTE *)sub_40E360(*(_DWORD *)v18) = 1;
        v19 = sub_40E370(v42);
        v20 = sub_40E370(*(_DWORD *)v19);
        *(_BYTE *)sub_40E360(*(_DWORD *)v20) = 0;
        v21 = sub_40E370(v42);
        v22 = sub_40E370(*(_DWORD *)v21);
        sub_40E5F0(v37, *(_DWORD *)v22);
      }
      else
      {
        v12 = sub_40E370(v42);
        *(_BYTE *)sub_40E360(*(_DWORD *)v12) = 1;
        *(_BYTE *)sub_40E360(a4) = 1;
        v13 = sub_40E370(v42);
        v14 = sub_40E370(*(_DWORD *)v13);
        *(_BYTE *)sub_40E360(*(_DWORD *)v14) = 0;
        v15 = sub_40E370(v42);
        v42 = *(_DWORD *)sub_40E370(*(_DWORD *)v15);
      }
    }
    else
    {
      v23 = sub_40E370(v42);
      v24 = sub_40E370(*(_DWORD *)v23);
      a4 = *(_DWORD *)sub_40B0E0(*(_DWORD *)v24);
      if ( *(_BYTE *)sub_40E360(a4) )
      {
        v29 = sub_40E370(v42);
        if ( v42 == *(_DWORD *)sub_40B0E0(*(_DWORD *)v29) )
        {
          v30 = *(_DWORD *)sub_40E370(v42);
          v42 = v30;
          sub_40E5F0(v37, v30);
        }
        v31 = sub_40E370(v42);
        *(_BYTE *)sub_40E360(*(_DWORD *)v31) = 1;
        v32 = sub_40E370(v42);
        v33 = sub_40E370(*(_DWORD *)v32);
        *(_BYTE *)sub_40E360(*(_DWORD *)v33) = 0;
        v34 = sub_40E370(v42);
        v35 = sub_40E370(*(_DWORD *)v34);
        sub_40E4C0(v37, *(_DWORD *)v35);
      }
      else
      {
        v25 = sub_40E370(v42);
        *(_BYTE *)sub_40E360(*(_DWORD *)v25) = 1;
        *(_BYTE *)sub_40E360(a4) = 1;
        v26 = sub_40E370(v42);
        v27 = sub_40E370(*(_DWORD *)v26);
        *(_BYTE *)sub_40E360(*(_DWORD *)v27) = 0;
        v28 = sub_40E370(v42);
        v42 = *(_DWORD *)sub_40E370(*(_DWORD *)v28);
      }
    }
  }
  v36 = sub_410A70(v37);
  *(_BYTE *)sub_40E360(*(_DWORD *)v36) = 1;
  sub_40B870(a2, v41, v37);
  return a2;
}

//----- (0040B670) --------------------------------------------------------
int __fastcall sub_40B670(int a1)
{
  int result; // eax@1
  int v2; // eax@1
  int v3; // edx@1
  int v4; // eax@1
  int v5; // edx@1
  int v6; // eax@1
  int v7; // eax@1
  int v8; // eax@1
  int v9; // [sp+0h] [bp-2Ch]@1
  char v10; // [sp+1Ch] [bp-10h]@1
  int v11; // [sp+24h] [bp-8h]@1
  int v12; // [sp+28h] [bp-4h]@1
  char v13; // [sp+Ch] [bp-20h]@1
  int v14; // [sp+14h] [bp-18h]@1
  int v15; // [sp+18h] [bp-14h]@1
  char v16; // [sp+4h] [bp-28h]@1

  v9 = a1;
  v2 = sub_408DE0(a1, (int)&v10);
  v3 = *(_DWORD *)(v2 + 4);
  v11 = *(_DWORD *)v2;
  v12 = v3;
  v4 = sub_40DB10(v9, (int)&v13);
  v5 = *(_DWORD *)(v4 + 4);
  v14 = *(_DWORD *)v4;
  v15 = v5;
  sub_40E3A0(v9, (int)&v16, v14, v5, v11, v12);
  v6 = sub_40B0E0(*(_DWORD *)(v9 + 24));
  sub_40E800(v6);
  v7 = sub_40E370(*(_DWORD *)(v9 + 24));
  sub_40E800(v7);
  v8 = sub_40B0F0(*(_DWORD *)(v9 + 24));
  sub_40E800(v8);
  result = unknown_libname_2(*(void **)(v9 + 24), 1);
  *(_DWORD *)(v9 + 24) = 0;
  *(_DWORD *)(v9 + 28) = 0;
  return result;
}

//----- (0040B740) --------------------------------------------------------
char __thiscall sub_40B740(int this, int a2, int a3)
{
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  return *(_WORD *)a2 < (signed int)*(_WORD *)a3;
}

//----- (0040B770) --------------------------------------------------------
char __thiscall sub_40B770(int this, unsigned int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_DWORD *)(this + 12) = 0;
  *(_DWORD *)(v3 + 16) = 0;
  *(_DWORD *)(v3 + 20) = 0;
  if ( a2 )
  {
    if ( sub_40E820() >= a2 )
    {
      *(_DWORD *)(v3 + 12) = sub_40E870(a2);
      *(_DWORD *)(v3 + 16) = *(_DWORD *)(v3 + 12);
      *(_DWORD *)(v3 + 20) = *(_DWORD *)(v3 + 12) + 48 * a2;
    }
    else
    {
      sub_40C910();
    }
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0040B7F0) --------------------------------------------------------
int __fastcall sub_40B7F0(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_40E840(*(void **)(v2 + 12), *(void **)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) / 48);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (0040B870) --------------------------------------------------------
int __thiscall sub_40B870(int this, int a2, int a3)
{
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  sub_40E890(this, a2, a3);
  return v4;
}

//----- (0040B890) --------------------------------------------------------
int __thiscall sub_40B890(int this, int a2, int a3)
{
  int v4; // [sp+4h] [bp-10h]@1

  v4 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  sub_40BD60(v4 + 28, a3);
  return v4;
}

//----- (0040B900) --------------------------------------------------------
int __thiscall sub_40B900(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_40E950(this, a2);
  return v3;
}

//----- (0040B920) --------------------------------------------------------
int __thiscall sub_40B920(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  v4 = *(_DWORD *)(a2 + 4);
  *(_DWORD *)this = *(_DWORD *)a2;
  *(_DWORD *)(this + 4) = v4;
  *(_BYTE *)(v5 + 8) = *(_BYTE *)a3;
  return v5;
}

//----- (0040B950) --------------------------------------------------------
int __fastcall sub_40B950(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_40EA60(a1);
  return v2;
}

//----- (0040B970) --------------------------------------------------------
int __fastcall sub_40B970(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  int v3; // ecx@3
  int v5; // eax@3
  int v6; // [sp+0h] [bp-4h]@1

  v6 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  v5 = sub_401080(v6);
  v3 = *(_DWORD *)(v6 + 4);
  if ( v3 == *(_DWORD *)(v5 + 24) )
    invalid_parameter_noinfo(v3, v6);
  return sub_40DB00(*(_DWORD *)(v6 + 4));
}

//----- (0040B9C0) --------------------------------------------------------
int __fastcall sub_40B9C0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_40EA80(a1);
  return v2;
}

//----- (0040B9E0) --------------------------------------------------------
char __thiscall sub_40B9E0(int this, unsigned int a2, int a3)
{
  char result; // al@1
  int v4; // [sp+0h] [bp-28h]@1
  int *v5; // [sp+18h] [bp-10h]@1
  int v6; // [sp+14h] [bp-14h]@1
  int v7; // [sp+24h] [bp-4h]@2
  int v8; // [sp+10h] [bp-18h]@2

  v5 = &v4;
  v6 = this;
  result = sub_402400(this, a2);
  if ( result )
  {
    v7 = 0;
    v8 = sub_40F010(*(void **)(v6 + 12), a2, a3);
    result = v6;
    *(_DWORD *)(v6 + 16) = v8;
  }
  return result;
}

//----- (0040BA90) --------------------------------------------------------
int __thiscall sub_40BA90(int this, unsigned int a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
  int v10; // eax@2
  int v11; // edx@2
  int v12; // eax@2
  int v13; // eax@4
  int v14; // edx@4
  unsigned int v15; // eax@4
  int v16; // ST10_4@4
  int v17; // eax@4
  int v18; // eax@4
  unsigned int v19; // edx@4
  int v20; // [sp+4h] [bp-54h]@1
  signed int v21; // [sp+54h] [bp-4h]@1
  char v22; // [sp+38h] [bp-20h]@2
  int v23; // [sp+40h] [bp-18h]@2
  int v24; // [sp+44h] [bp-14h]@2
  char v25; // [sp+28h] [bp-30h]@4
  int v26; // [sp+30h] [bp-28h]@4
  unsigned int v27; // [sp+34h] [bp-24h]@4
  char v28; // [sp+18h] [bp-40h]@4
  char v29; // [sp+10h] [bp-48h]@4
  int v30; // [sp+20h] [bp-38h]@4
  unsigned int v31; // [sp+24h] [bp-34h]@4
  char v32; // [sp+8h] [bp-50h]@4

  v20 = this;
  v21 = 0;
  if ( sub_4095F0(this) >= a2 )
  {
    if ( a2 < sub_4095F0(v20) )
    {
      v13 = sub_40EB60(v20, (int)&v25);
      v14 = *(_DWORD *)v13;
      v15 = *(_DWORD *)(v13 + 4);
      v26 = v14;
      v27 = v15;
      v16 = a2;
      v17 = sub_402FA0(v20, (int)&v28);
      v18 = sub_40F2A0(v17, (int)&v29, v16);
      v19 = *(_DWORD *)(v18 + 4);
      v30 = *(_DWORD *)v18;
      v31 = v19;
      sub_40EB90(v20, (int)&v32, v30, v19, v26, v27);
    }
  }
  else
  {
    v10 = sub_40EB60(v20, (int)&v22);
    v11 = *(_DWORD *)(v10 + 4);
    v23 = *(_DWORD *)v10;
    v24 = v11;
    v12 = sub_4095F0(v20);
    sub_40EC60(v20, v23, v24, a2 - v12, (int)&a3);
  }
  v21 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
}

//----- (0040BB90) --------------------------------------------------------
int __fastcall sub_40BB90(int a1)
{
  int result; // eax@3
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
  {
    sub_40EC30(*(void **)(v2 + 12), *(void **)(v2 + 16));
    unknown_libname_2(*(void **)(v2 + 12), (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) / 28);
  }
  *(_DWORD *)(v2 + 12) = 0;
  *(_DWORD *)(v2 + 16) = 0;
  result = v2;
  *(_DWORD *)(v2 + 20) = 0;
  return result;
}

//----- (0040BC10) --------------------------------------------------------
int __thiscall sub_40BC10(int this, int a2)
{
  int v3; // eax@3
  int v4; // [sp+4h] [bp-10h]@1
  int v5; // [sp+10h] [bp-4h]@1

  v4 = this;
  sub_40F050(this, a2);
  v5 = 0;
  if ( (unsigned __int8)std__ios_base__good(*(_DWORD *)(*(_DWORD *)a2 + 4) + a2) )
  {
    if ( std__basic_ios_char_std__char_traits_char____tie(*(_DWORD *)(*(_DWORD *)a2 + 4) + a2) )
    {
      v3 = std__basic_ios_char_std__char_traits_char____tie(*(_DWORD *)(*(_DWORD *)a2 + 4) + a2);
      std__basic_ostream_char_std__char_traits_char____flush(v3);
    }
  }
  *(_BYTE *)(v4 + 4) = std__ios_base__good(*(_DWORD *)(*(_DWORD *)a2 + 4) + a2);
  return v4;
}

//----- (0040BCD0) --------------------------------------------------------
int __fastcall sub_40BCD0(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1
  int v3; // [sp+10h] [bp-4h]@1

  v2 = a1;
  v3 = 0;
  if ( !(unsigned __int8)std__uncaught_exception() )
    std__basic_ostream_char_std__char_traits_char_____Osfx(*(_DWORD *)v2);
  return sub_40F0A0(v2);
}

//----- (0040BD40) --------------------------------------------------------
char __fastcall sub_40BD40(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return *(_BYTE *)(a1 + 4);
}

//----- (0040BD60) --------------------------------------------------------
int __thiscall sub_40BD60(int this, int a2)
{
  int v3; // [sp+4h] [bp-10h]@1
  int v4; // [sp+10h] [bp-4h]@1

  v3 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  v4 = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 28);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 56);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 84);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 112);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 140);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 168);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 196);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 224);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 252);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 280);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 308);
  LOBYTE(v4) = 11;
  *(_WORD *)(v3 + 336) = *(_WORD *)(a2 + 336);
  *(_BYTE *)(v3 + 338) = *(_BYTE *)(a2 + 338);
  *(_BYTE *)(v3 + 339) = *(_BYTE *)(a2 + 339);
  *(_BYTE *)(v3 + 340) = *(_BYTE *)(a2 + 340);
  *(_BYTE *)(v3 + 341) = *(_BYTE *)(a2 + 341);
  *(_BYTE *)(v3 + 342) = *(_BYTE *)(a2 + 342);
  *(_WORD *)(v3 + 344) = *(_WORD *)(a2 + 344);
  *(_BYTE *)(v3 + 346) = *(_BYTE *)(a2 + 346);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 348);
  LOBYTE(v4) = 12;
  *(_WORD *)(v3 + 376) = *(_WORD *)(a2 + 376);
  *(_BYTE *)(v3 + 378) = *(_BYTE *)(a2 + 378);
  *(_BYTE *)(v3 + 379) = *(_BYTE *)(a2 + 379);
  *(_BYTE *)(v3 + 380) = *(_BYTE *)(a2 + 380);
  *(_BYTE *)(v3 + 381) = *(_BYTE *)(a2 + 381);
  *(_BYTE *)(v3 + 382) = *(_BYTE *)(a2 + 382);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 384);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 412);
  LOBYTE(v4) = 14;
  *(_WORD *)(v3 + 440) = *(_WORD *)(a2 + 440);
  *(_BYTE *)(v3 + 442) = *(_BYTE *)(a2 + 442);
  *(_BYTE *)(v3 + 443) = *(_BYTE *)(a2 + 443);
  *(_WORD *)(v3 + 444) = *(_WORD *)(a2 + 444);
  sub_40C480(v3 + 448, a2 + 448);
  LOBYTE(v4) = 15;
  *(_BYTE *)(v3 + 472) = *(_BYTE *)(a2 + 472);
  *(_WORD *)(v3 + 474) = *(_WORD *)(a2 + 474);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 476);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 504);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 532);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 560);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 588);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 616);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 644);
  LOBYTE(v4) = 22;
  *(_WORD *)(v3 + 672) = *(_WORD *)(a2 + 672);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 676);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 704);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 732);
  LOBYTE(v4) = 25;
  *(_WORD *)(v3 + 760) = *(_WORD *)(a2 + 760);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 764);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 792);
  LOBYTE(v4) = 27;
  *(_WORD *)(v3 + 820) = *(_WORD *)(a2 + 820);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 824);
  LOBYTE(v4) = 28;
  *(_WORD *)(v3 + 852) = *(_WORD *)(a2 + 852);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 856);
  LOBYTE(v4) = 29;
  *(_WORD *)(v3 + 884) = *(_WORD *)(a2 + 884);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 888);
  LOBYTE(v4) = 30;
  *(_WORD *)(v3 + 916) = *(_WORD *)(a2 + 916);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 920);
  LOBYTE(v4) = 31;
  *(_WORD *)(v3 + 948) = *(_WORD *)(a2 + 948);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 952);
  LOBYTE(v4) = 32;
  *(_WORD *)(v3 + 980) = *(_WORD *)(a2 + 980);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 984);
  LOBYTE(v4) = 33;
  *(_WORD *)(v3 + 1012) = *(_WORD *)(a2 + 1012);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 1016);
  LOBYTE(v4) = 34;
  *(_WORD *)(v3 + 1044) = *(_WORD *)(a2 + 1044);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 1048);
  LOBYTE(v4) = 35;
  *(_WORD *)(v3 + 1076) = *(_WORD *)(a2 + 1076);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 1080);
  LOBYTE(v4) = 36;
  *(_WORD *)(v3 + 1108) = *(_WORD *)(a2 + 1108);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 1112);
  LOBYTE(v4) = 37;
  *(_WORD *)(v3 + 1140) = *(_WORD *)(a2 + 1140);
  *(_WORD *)(v3 + 1142) = *(_WORD *)(a2 + 1142);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2 + 1144);
  *(_BYTE *)(v3 + 1172) = *(_BYTE *)(a2 + 1172);
  return v3;
}

//----- (0040C480) --------------------------------------------------------
int __thiscall sub_40C480(int this, int a2)
{
  char v3; // ST10_1@1
  int v4; // eax@1
  void *v5; // ST10_4@2
  int v6; // eax@2
  int v7; // ST0C_4@2
  int v8; // ST08_4@2
  int v9; // eax@2
  int v10; // [sp+0h] [bp-3Ch]@1
  int *v11; // [sp+2Ch] [bp-10h]@1
  int v12; // [sp+14h] [bp-28h]@1
  char *v13; // [sp+28h] [bp-14h]@1
  int v14; // [sp+38h] [bp-4h]@1
  char v15; // [sp+20h] [bp-1Ch]@2
  char v16; // [sp+18h] [bp-24h]@2

  v11 = &v10;
  v12 = this;
  v3 = this;
  v13 = &v3;
  std___Init_locks__operator_(a2 + 8);
  sub_4027B0(v12, v3);
  v14 = 0;
  v4 = sub_408830(a2);
  if ( sub_409C50(v12, v4) )
  {
    LOBYTE(v14) = 1;
    v5 = *(void **)(v12 + 12);
    v6 = sub_40F330(a2, (int)&v15);
    v7 = *(_DWORD *)(v6 + 4);
    v8 = *(_DWORD *)v6;
    v9 = sub_403A60(a2, (int)&v16);
    *(_DWORD *)(v12 + 16) = sub_412D40(*(_DWORD *)v9, *(_DWORD *)(v9 + 4), v8, v7, v5);
  }
  return v12;
}

//----- (0040C580) --------------------------------------------------------
void *__thiscall sub_40C580(int this, int a2, int a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int  s; // [sp+80h] [bp+0h]@1
  unsigned int v11; // [sp+60h] [bp-20h]@1
  int v12; // [sp-4h] [bp-84h]@1
  int *v13; // [sp+70h] [bp-10h]@1
  int v14; // [sp+18h] [bp-68h]@1
  int v15; // [sp+6Ch] [bp-14h]@1
  int v16; // [sp+14h] [bp-6Ch]@7
  void *v17; // [sp+64h] [bp-1Ch]@11
  void *v18; // [sp+68h] [bp-18h]@11
  signed int v19; // [sp+7Ch] [bp-4h]@11
  void *v20; // [sp+10h] [bp-70h]@11
  int v21; // [sp+Ch] [bp-74h]@11
  char v22; // [sp+40h] [bp-40h]@15
  char v23; // [sp+1Ch] [bp-64h]@16
  int v24; // [sp+3Ch] [bp-44h]@16

  v11 = (unsigned int)& s ^ dword_43901C;
  v13 = &v12;
  v14 = this;
  result = (void *)sub_409AF0(this);
  v15 = (int)result;
  if ( a4 )
  {
    v6 = sub_408830(v14);
    if ( sub_40CE50() - v6 >= (unsigned int)a4 )
    {
      if ( v15 >= (unsigned int)(a4 + sub_408830(v14)) )
      {
        if ( (*(_DWORD *)(v14 + 16) - a3) >> 5 >= (unsigned int)a4 )
        {
          sub_40F2E0((int)&v23, a5);
          v19 = 5;
          v24 = *(_DWORD *)(v14 + 16);
          *(_DWORD *)(v14 + 16) = unknown_libname_10(v24 - 32 * a4, v24, *(_DWORD *)(v14 + 16));
          sub_412DD0(a3, v24 - 32 * a4, v24);
          sub_412DA0(a3, (_BYTE)a3 + 32 * (_BYTE)a4, (int)&v23);
          v19 = -1;
          result = (void *)sub_4080D0((int)&v23);
        }
        else
        {
          sub_40F2E0((int)&v22, a5);
          v19 = 2;
          unknown_libname_10(a3, *(_DWORD *)(v14 + 16), a3 + 32 * a4);
          LOBYTE(v19) = 3;
          sub_409D70(*(void **)(v14 + 16), a4 - ((*(_DWORD *)(v14 + 16) - a3) >> 5), (int)&v22);
          v19 = 2;
          *(_DWORD *)(v14 + 16) += 32 * a4;
          sub_412DA0(a3, *(_DWORD *)(v14 + 16) - 32 * a4, (int)&v22);
          v19 = -1;
          result = (void *)sub_4080D0((int)&v22);
        }
      }
      else
      {
        if ( sub_40CE50() - ((unsigned int)v15 >> 1) >= v15 )
          v16 = v15 + ((unsigned int)v15 >> 1);
        else
          v16 = 0;
        v15 = v16;
        if ( v15 < (unsigned int)(a4 + sub_408830(v14)) )
          v15 = a4 + sub_408830(v14);
        v7 = sub_40D200(v15);
        v17 = v7;
        v18 = v7;
        v19 = 0;
        v8 = (void *)unknown_libname_10(*(_DWORD *)(v14 + 12), a3, v7);
        v20 = v8;
        v18 = v8;
        v9 = sub_409D70(v8, a4, a5);
        v21 = v9;
        v18 = (void *)v9;
        unknown_libname_10(a3, *(_DWORD *)(v14 + 16), v9);
        v19 = -1;
        a4 += sub_408830(v14);
        if ( *(_DWORD *)(v14 + 12) )
        {
          sub_409CD0(*(_DWORD *)(v14 + 12), *(_DWORD *)(v14 + 16));
          unknown_libname_2(*(void **)(v14 + 12), (*(_DWORD *)(v14 + 20) - *(_DWORD *)(v14 + 12)) >> 5);
        }
        *(_DWORD *)(v14 + 20) = (char *)v17 + 32 * v15;
        *(_DWORD *)(v14 + 16) = (char *)v17 + 32 * a4;
        result = v17;
        *(_DWORD *)(v14 + 12) = v17;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (0040C910) --------------------------------------------------------
int __cdecl sub_40C910()
{
  char v1; // [sp+4h] [bp-50h]@1
  signed int v2; // [sp+50h] [bp-4h]@1
  char v3; // [sp+20h] [bp-34h]@1

  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v1);
  v2 = 0;
  sub_401270((int)&v3, (int)&v1);
  CxxThrowException(&v3, &unk_433D88);
  v2 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v1);
}

//----- (0040C990) --------------------------------------------------------
signed int __cdecl sub_40C990()
{
  return sub_40F390();
}

//----- (0040C9B0) --------------------------------------------------------
void *__thiscall sub_40C9B0(int this, int a2, int a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int  s; // [sp+344h] [bp+0h]@1
  unsigned int v11; // [sp+324h] [bp-20h]@1
  int v12; // [sp-4h] [bp-348h]@1
  int *v13; // [sp+334h] [bp-10h]@1
  int v14; // [sp+18h] [bp-32Ch]@1
  int v15; // [sp+330h] [bp-14h]@1
  int v16; // [sp+14h] [bp-330h]@7
  void *v17; // [sp+328h] [bp-1Ch]@11
  void *v18; // [sp+32Ch] [bp-18h]@11
  signed int v19; // [sp+340h] [bp-4h]@11
  void *v20; // [sp+10h] [bp-334h]@11
  int v21; // [sp+Ch] [bp-338h]@11
  char v22; // [sp+1A4h] [bp-1A0h]@15
  char v23; // [sp+1Ch] [bp-328h]@16
  int v24; // [sp+1A0h] [bp-1A4h]@16

  v11 = (unsigned int)& s ^ dword_43901C;
  v13 = &v12;
  v14 = this;
  result = (void *)sub_409DB0(this);
  v15 = (int)result;
  if ( a4 )
  {
    v6 = sub_4085B0(v14);
    if ( sub_40C990() - v6 >= (unsigned int)a4 )
    {
      if ( v15 >= (unsigned int)(a4 + sub_4085B0(v14)) )
      {
        if ( (*(_DWORD *)(v14 + 16) - a3) / 380 >= (unsigned int)a4 )
        {
          sub_4079E0((int)&v23, a5);
          v19 = 5;
          v24 = *(_DWORD *)(v14 + 16);
          *(_DWORD *)(v14 + 16) = unknown_libname_11(v24 - 380 * a4, v24, *(_DWORD *)(v14 + 16));
          sub_412EA0(a3, v24 - 380 * a4, v24);
          sub_412E70(a3, (_BYTE)a3 + 124 * (_BYTE)a4, (int)&v23);
          v19 = -1;
          result = (void *)sub_4078E0((int)&v23);
        }
        else
        {
          sub_4079E0((int)&v22, a5);
          v19 = 2;
          unknown_libname_11(a3, *(_DWORD *)(v14 + 16), a3 + 380 * a4);
          LOBYTE(v19) = 3;
          sub_40A050(*(void **)(v14 + 16), a4 - (*(_DWORD *)(v14 + 16) - a3) / 380, (int)&v22);
          v19 = 2;
          *(_DWORD *)(v14 + 16) += 380 * a4;
          sub_412E70(a3, *(_DWORD *)(v14 + 16) - 380 * a4, (int)&v22);
          v19 = -1;
          result = (void *)sub_4078E0((int)&v22);
        }
      }
      else
      {
        if ( sub_40C990() - ((unsigned int)v15 >> 1) >= v15 )
          v16 = v15 + ((unsigned int)v15 >> 1);
        else
          v16 = 0;
        v15 = v16;
        if ( v15 < (unsigned int)(a4 + sub_4085B0(v14)) )
          v15 = a4 + sub_4085B0(v14);
        v7 = sub_40CE30(v15);
        v17 = v7;
        v18 = v7;
        v19 = 0;
        v8 = (void *)unknown_libname_11(*(_DWORD *)(v14 + 12), a3, v7);
        v20 = v8;
        v18 = v8;
        v9 = sub_40A050(v8, a4, a5);
        v21 = v9;
        v18 = (void *)v9;
        unknown_libname_11(a3, *(_DWORD *)(v14 + 16), v9);
        v19 = -1;
        a4 += sub_4085B0(v14);
        if ( *(_DWORD *)(v14 + 12) )
        {
          sub_409FA0(*(_DWORD *)(v14 + 12), *(_DWORD *)(v14 + 16));
          unknown_libname_2(*(void **)(v14 + 12), (*(_DWORD *)(v14 + 20) - *(_DWORD *)(v14 + 12)) / 380);
        }
        *(_DWORD *)(v14 + 20) = (char *)v17 + 380 * v15;
        *(_DWORD *)(v14 + 16) = (char *)v17 + 380 * a4;
        result = v17;
        *(_DWORD *)(v14 + 12) = v17;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (0040CE30) --------------------------------------------------------
void *__stdcall sub_40CE30(unsigned int a1)
{
  return sub_412F10(a1);
}

//----- (0040CE50) --------------------------------------------------------
signed int __cdecl sub_40CE50()
{
  return sub_40F360();
}

//----- (0040CE70) --------------------------------------------------------
void *__thiscall sub_40CE70(int this, int a2, int a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int  s; // [sp+80h] [bp+0h]@1
  unsigned int v11; // [sp+60h] [bp-20h]@1
  int v12; // [sp-4h] [bp-84h]@1
  int *v13; // [sp+70h] [bp-10h]@1
  int v14; // [sp+18h] [bp-68h]@1
  int v15; // [sp+6Ch] [bp-14h]@1
  int v16; // [sp+14h] [bp-6Ch]@7
  void *v17; // [sp+64h] [bp-1Ch]@11
  void *v18; // [sp+68h] [bp-18h]@11
  signed int v19; // [sp+7Ch] [bp-4h]@11
  void *v20; // [sp+10h] [bp-70h]@11
  int v21; // [sp+Ch] [bp-74h]@11
  char v22; // [sp+40h] [bp-40h]@15
  char v23; // [sp+1Ch] [bp-64h]@16
  int v24; // [sp+3Ch] [bp-44h]@16

  v11 = (unsigned int)& s ^ dword_43901C;
  v13 = &v12;
  v14 = this;
  result = (void *)sub_409AF0(this);
  v15 = (int)result;
  if ( a4 )
  {
    v6 = sub_408830(v14);
    if ( sub_40CE50() - v6 >= (unsigned int)a4 )
    {
      if ( v15 >= (unsigned int)(a4 + sub_408830(v14)) )
      {
        if ( (*(_DWORD *)(v14 + 16) - a3) >> 5 >= (unsigned int)a4 )
        {
          sub_407F30((int)&v23, a5);
          v19 = 5;
          v24 = *(_DWORD *)(v14 + 16);
          *(_DWORD *)(v14 + 16) = unknown_libname_12(v24 - 32 * a4, v24, *(_DWORD *)(v14 + 16));
          sub_412FD0(a3, v24 - 32 * a4, v24);
          sub_412FA0(a3, (_BYTE)a3 + 32 * (_BYTE)a4, (int)&v23);
          v19 = -1;
          result = (void *)sub_407F10((int)&v23);
        }
        else
        {
          sub_407F30((int)&v22, a5);
          v19 = 2;
          unknown_libname_12(a3, *(_DWORD *)(v14 + 16), a3 + 32 * a4);
          LOBYTE(v19) = 3;
          sub_40A260(*(void **)(v14 + 16), a4 - ((*(_DWORD *)(v14 + 16) - a3) >> 5), (int)&v22);
          v19 = 2;
          *(_DWORD *)(v14 + 16) += 32 * a4;
          sub_412FA0(a3, *(_DWORD *)(v14 + 16) - 32 * a4, (int)&v22);
          v19 = -1;
          result = (void *)sub_407F10((int)&v22);
        }
      }
      else
      {
        if ( sub_40CE50() - ((unsigned int)v15 >> 1) >= v15 )
          v16 = v15 + ((unsigned int)v15 >> 1);
        else
          v16 = 0;
        v15 = v16;
        if ( v15 < (unsigned int)(a4 + sub_408830(v14)) )
          v15 = a4 + sub_408830(v14);
        v7 = sub_40D200(v15);
        v17 = v7;
        v18 = v7;
        v19 = 0;
        v8 = (void *)unknown_libname_12(*(_DWORD *)(v14 + 12), a3, v7);
        v20 = v8;
        v18 = v8;
        v9 = sub_40A260(v8, a4, a5);
        v21 = v9;
        v18 = (void *)v9;
        unknown_libname_12(a3, *(_DWORD *)(v14 + 16), v9);
        v19 = -1;
        a4 += sub_408830(v14);
        if ( *(_DWORD *)(v14 + 12) )
        {
          sub_40A1C0(*(_DWORD *)(v14 + 12), *(_DWORD *)(v14 + 16));
          unknown_libname_2(*(void **)(v14 + 12), (*(_DWORD *)(v14 + 20) - *(_DWORD *)(v14 + 12)) >> 5);
        }
        *(_DWORD *)(v14 + 20) = (char *)v17 + 32 * v15;
        *(_DWORD *)(v14 + 16) = (char *)v17 + 32 * a4;
        result = v17;
        *(_DWORD *)(v14 + 12) = v17;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (0040D200) --------------------------------------------------------
void *__stdcall sub_40D200(unsigned int a1)
{
  return sub_413040(a1);
}

//----- (0040D220) --------------------------------------------------------
signed int __cdecl sub_40D220()
{
  return sub_40F3C0();
}

//----- (0040D240) --------------------------------------------------------
int __stdcall sub_40D240(int a1, int a2)
{
  return sub_413090(a1, a2);
}

//----- (0040D270) --------------------------------------------------------
int __thiscall sub_40D270(int this, int a2, int a3, int a4, void **a5)
{
  int result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int v10; // [sp+0h] [bp-48h]@1
  int *v11; // [sp+38h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-2Ch]@1
  int v13; // [sp+34h] [bp-14h]@1
  int v14; // [sp+18h] [bp-30h]@7
  void *v15; // [sp+2Ch] [bp-1Ch]@11
  void *v16; // [sp+30h] [bp-18h]@11
  signed int v17; // [sp+44h] [bp-4h]@11
  void *v18; // [sp+14h] [bp-34h]@11
  int v19; // [sp+10h] [bp-38h]@11
  void *v20; // [sp+28h] [bp-20h]@15
  void *v21; // [sp+20h] [bp-28h]@16
  int v22; // [sp+24h] [bp-24h]@16

  v11 = &v10;
  v12 = this;
  result = sub_40A2A0(this);
  v13 = result;
  if ( a4 )
  {
    v6 = sub_408A60(v12);
    if ( sub_40D220() - v6 >= (unsigned int)a4 )
    {
      if ( v13 >= (unsigned int)(a4 + sub_408A60(v12)) )
      {
        if ( (*(_DWORD *)(v12 + 16) - a3) >> 2 >= (unsigned int)a4 )
        {
          v21 = *a5;
          v22 = *(_DWORD *)(v12 + 16);
          *(_DWORD *)(v12 + 16) = unknown_libname_13(v22 - 4 * a4, v22, *(_DWORD *)(v12 + 16));
          sub_413130(a3, v22 - 4 * a4, v22);
          result = sub_413100(a3, (_BYTE)a3 + 4 * (_BYTE)a4, (int)&v21);
        }
        else
        {
          v20 = *a5;
          unknown_libname_13(a3, *(_DWORD *)(v12 + 16), a3 + 4 * a4);
          v17 = 2;
          sub_40A4F0(*(void **)(v12 + 16), a4 - ((*(_DWORD *)(v12 + 16) - a3) >> 2), &v20);
          v17 = -1;
          *(_DWORD *)(v12 + 16) += 4 * a4;
          result = sub_413100(a3, *(_DWORD *)(v12 + 16) - 4 * a4, (int)&v20);
        }
      }
      else
      {
        if ( sub_40D220() - ((unsigned int)v13 >> 1) >= v13 )
          v14 = v13 + ((unsigned int)v13 >> 1);
        else
          v14 = 0;
        v13 = v14;
        if ( v13 < (unsigned int)(a4 + sub_408A60(v12)) )
          v13 = a4 + sub_408A60(v12);
        v7 = sub_4038C0(v13);
        v15 = v7;
        v16 = v7;
        v17 = 0;
        v8 = (void *)unknown_libname_13(*(_DWORD *)(v12 + 12), a3, v7);
        v18 = v8;
        v16 = v8;
        v9 = sub_40A4F0(v8, a4, a5);
        v19 = v9;
        v16 = (void *)v9;
        unknown_libname_13(a3, *(_DWORD *)(v12 + 16), v9);
        v17 = -1;
        a4 += sub_408A60(v12);
        if ( *(_DWORD *)(v12 + 12) )
        {
          sub_40D240(*(_DWORD *)(v12 + 12), *(_DWORD *)(v12 + 16));
          unknown_libname_2(*(void **)(v12 + 12), (*(_DWORD *)(v12 + 20) - *(_DWORD *)(v12 + 12)) >> 2);
        }
        *(_DWORD *)(v12 + 20) = (char *)v15 + 4 * v13;
        *(_DWORD *)(v12 + 16) = (char *)v15 + 4 * a4;
        result = v12;
        *(_DWORD *)(v12 + 12) = v15;
      }
    }
    else
    {
      result = sub_40C910();
    }
  }
  return result;
}

//----- (0040D5C0) --------------------------------------------------------
int __cdecl sub_40D5C0()
{
  return unknown_libname_8();
}

//----- (0040D5E0) --------------------------------------------------------
int __thiscall sub_40D5E0(int this, int a2, char a3, int a4, int a5)
{
  int result; // eax@1
  int v6; // esi@3
  int v7; // eax@11
  int v8; // eax@11
  int v9; // eax@11
  int v10; // [sp+0h] [bp-40h]@1
  int *v11; // [sp+30h] [bp-10h]@1
  int v12; // [sp+14h] [bp-2Ch]@1
  int v13; // [sp+2Ch] [bp-14h]@1
  int v14; // [sp+10h] [bp-30h]@7
  void *Dst; // [sp+24h] [bp-1Ch]@11
  int v16; // [sp+28h] [bp-18h]@11
  signed int v17; // [sp+3Ch] [bp-4h]@11
  __int16 v18; // [sp+20h] [bp-20h]@15
  __int16 v19; // [sp+18h] [bp-28h]@16
  int v20; // [sp+1Ch] [bp-24h]@16

  v11 = &v10;
  v12 = this;
  result = sub_40A530(this);
  v13 = result;
  if ( a4 )
  {
    v6 = sub_40D5C0();
    if ( v6 - sub_408C20(v12) >= (unsigned int)a4 )
    {
      if ( v13 >= (unsigned int)(a4 + sub_408C20(v12)) )
      {
        if ( (*(_DWORD *)(v12 + 16) - a3) >> 1 >= (unsigned int)a4 )
        {
          v19 = *(_WORD *)a5;
          v20 = *(_DWORD *)(v12 + 16);
          *(_DWORD *)(v12 + 16) = unknown_libname_14(v20 - 2 * a4, v20, *(void **)(v12 + 16));
          sub_413200(a3, v20 - 2 * a4, v20);
          result = sub_4131D0(a3, a3 + 2 * (_BYTE)a4, (int)&v19);
        }
        else
        {
          v18 = *(_WORD *)a5;
          unknown_libname_14(a3, *(_DWORD *)(v12 + 16), (void *)(a3 + 2 * a4));
          v17 = 2;
          sub_40A780(*(_DWORD *)(v12 + 16), a4 - ((*(_DWORD *)(v12 + 16) - a3) >> 1), (int)&v18);
          v17 = -1;
          *(_DWORD *)(v12 + 16) += 2 * a4;
          result = sub_4131D0(a3, *(_DWORD *)(v12 + 16) - 2 * a4, (int)&v18);
        }
      }
      else
      {
        if ( sub_40D5C0() - ((unsigned int)v13 >> 1) >= v13 )
          v14 = v13 + ((unsigned int)v13 >> 1);
        else
          v14 = 0;
        v13 = v14;
        if ( v13 < (unsigned int)(a4 + sub_408C20(v12)) )
          v13 = a4 + sub_408C20(v12);
        v7 = sub_40D930(v13);
        Dst = (void *)v7;
        v16 = v7;
        v17 = 0;
        v8 = unknown_libname_14(*(_DWORD *)(v12 + 12), a3, (void *)v7);
        v16 = v8;
        v9 = sub_40A780(v8, a4, a5);
        v16 = v9;
        unknown_libname_14(a3, *(_DWORD *)(v12 + 16), (void *)v9);
        v17 = -1;
        a4 += sub_408C20(v12);
        if ( *(_DWORD *)(v12 + 12) )
        {
          sub_402200(*(_DWORD *)(v12 + 12), *(_DWORD *)(v12 + 16));
          unknown_libname_2(*(void **)(v12 + 12), (*(_DWORD *)(v12 + 20) - *(_DWORD *)(v12 + 12)) >> 1);
        }
        *(_DWORD *)(v12 + 20) = (char *)Dst + 2 * v13;
        *(_DWORD *)(v12 + 16) = (char *)Dst + 2 * a4;
        result = v12;
        *(_DWORD *)(v12 + 12) = Dst;
      }
    }
    else
    {
      result = sub_40C910();
    }
  }
  return result;
}

//----- (0040D930) --------------------------------------------------------
int __stdcall sub_40D930(int a1)
{
  return unknown_libname_15(a1);
}

//----- (0040D950) --------------------------------------------------------
int __cdecl sub_40D950(int a1)
{
  return a1 + 197;
}

//----- (0040D960) --------------------------------------------------------
int __thiscall sub_40D960(int this, int a2, int a3, int a4, char a5, int a6)
{
  int result; // eax@3
  int v7; // eax@1
  int v8; // eax@2
  int v9; // eax@5
  int v10; // [sp+0h] [bp-24h]@1
  char v11; // [sp+1Ch] [bp-8h]@1
  char v12; // [sp+14h] [bp-10h]@2
  char v13; // [sp+Ch] [bp-18h]@5
  char v14; // [sp+4h] [bp-20h]@5

  v10 = this;
  v7 = sub_40DB10(this, (int)&v11);
  if ( sub_411B90((int)&a3, v7) && (v8 = sub_408DE0(v10, (int)&v12), (unsigned __int8)sub_411B90((int)&a5, v8)) )
  {
    sub_40FC10(v10);
    sub_40DB10(v10, a2);
    result = a2;
  }
  else
  {
    while ( sub_40EA30((int)&a3, (int)&a5) )
    {
      v9 = sub_411800((int)&a3, (int)&v13, 0);
      sub_40F430(v10, (int)&v14, *(_DWORD *)v9, *(_DWORD *)(v9 + 4));
    }
    sub_4100B0(v10, a2, a3, a4);
    result = a2;
  }
  return result;
}

//----- (0040DA10) --------------------------------------------------------
int __fastcall sub_40DA10(int a1)
{
  int result; // eax@1
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)(v2 + 24) = sub_40FEF0(a1);
  *(_BYTE *)sub_40D950(*(_DWORD *)(v2 + 24)) = 1;
  *(_DWORD *)sub_410A70(v2) = *(_DWORD *)(v2 + 24);
  *(_DWORD *)sub_40FC70(v2) = *(_DWORD *)(v2 + 24);
  *(_DWORD *)sub_40DA80(v2) = *(_DWORD *)(v2 + 24);
  result = v2;
  *(_DWORD *)(v2 + 28) = 0;
  return result;
}

//----- (0040DA80) --------------------------------------------------------
int __fastcall sub_40DA80(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return sub_40B0F0(*(_DWORD *)(a1 + 24));
}

//----- (0040DAA0) --------------------------------------------------------
int __thiscall sub_40DAA0(int this, int *a2, char a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+0h] [bp-8h]@1
  char *v6; // [sp+4h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  std___Init_locks__operator_(&a3);
  sub_410060(v5, a2, v4);
  std___Init_locks__operator_(&a3);
  return v5;
}

//----- (0040DAF0) --------------------------------------------------------
int __cdecl sub_40DAF0(int a1)
{
  return a1 + 1217;
}

//----- (0040DB00) --------------------------------------------------------
int __cdecl sub_40DB00(int a1)
{
  return a1 + 12;
}

//----- (0040DB10) --------------------------------------------------------
int __thiscall sub_40DB10(int this, int a2)
{
  int v3; // ST04_4@1
  int v4; // eax@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  v3 = this;
  v4 = sub_40FC70(this);
  sub_40B870(a2, *(_DWORD *)v4, v3);
  return a2;
}

//----- (0040DB60) --------------------------------------------------------
int __thiscall sub_40DB60(int this, int a2, int a3)
{
  int result; // eax@8
  int v4; // ST10_4@3
  int v5; // eax@3
  char v6; // al@3
  int v8; // eax@11
  int v9; // eax@12
  int v10; // ST10_4@14
  int v11; // eax@14
  int v12; // eax@14
  int v13; // eax@15
  int v14; // [sp+4h] [bp-48h]@1
  int v15; // [sp+40h] [bp-Ch]@1
  int v16; // [sp+44h] [bp-8h]@1
  char v17; // [sp+4Bh] [bp-1h]@1
  int v18; // [sp+0h] [bp-4Ch]@4
  char v19; // [sp+38h] [bp-14h]@7
  char v22; // [sp+24h] [bp-28h]@11
  char v23; // [sp+23h] [bp-29h]@12
  char v24; // [sp+18h] [bp-34h]@12
  char v25; // [sp+17h] [bp-35h]@15
  char v26; // [sp+Ch] [bp-40h]@15
  char v27; // [sp+Bh] [bp-41h]@16

  v14 = this;
  v15 = *(_DWORD *)sub_410A70(this);
  v16 = *(_DWORD *)(v14 + 24);
  v17 = 1;
  while ( !*(_BYTE *)sub_40DAF0(v15) )
  {
    v16 = v15;
    v4 = sub_40A920(v15);
    v5 = sub_40B0E0(a3);
    v6 = sub_40A900(v5, v4);
    v17 = v6;
    if ( v6 )
      v18 = *(_DWORD *)sub_40B0E0(v15);
    else
      v18 = *(_DWORD *)sub_40B0F0(v15);
    v15 = v18;
  }
  sub_40B870((int)&v19, v16, v14);
  if ( v17 )
  {
    v8 = sub_40DB10(v14, (int)&v22);
    if ( sub_411B90((int)&v19, v8) )
    {
      v23 = 1;
      v9 = sub_40DE50(v14, (int)&v24, 1, v16, a3);
      sub_40B920(a2, v9, (int)&v23);
      return a2;
    }
    sub_411920((int)&v19);
  }
  v10 = sub_40B0E0(a3);
  v11 = sub_415300();
  v12 = sub_40A920(v11);
  if ( (unsigned __int8)sub_40A900(v12, v10) )
  {
    v25 = 1;
    v13 = sub_40DE50(v14, (int)&v26, v17, v16, a3);
    sub_40B920(a2, v13, (int)&v25);
    result = a2;
  }
  else
  {
    v27 = 0;
    sub_40B920(a2, (int)&v19, (int)&v27);
    result = a2;
  }
  return result;
}

//----- (0040DD30) --------------------------------------------------------
int __thiscall sub_40DD30(int this, int a2, int a3, int a4, char a5, int a6)
{
  int result; // eax@3
  int v7; // eax@1
  int v8; // eax@2
  int v9; // eax@5
  int v10; // [sp+0h] [bp-24h]@1
  char v11; // [sp+1Ch] [bp-8h]@1
  char v12; // [sp+14h] [bp-10h]@2
  char v13; // [sp+Ch] [bp-18h]@5
  char v14; // [sp+4h] [bp-20h]@5

  v10 = this;
  v7 = sub_40DB10(this, (int)&v11);
  if ( sub_411B90((int)&a3, v7) && (v8 = sub_408DE0(v10, (int)&v12), (unsigned __int8)sub_411B90((int)&a5, v8)) )
  {
    sub_4108E0(v10);
    sub_40DB10(v10, a2);
    result = a2;
  }
  else
  {
    while ( sub_40EA30((int)&a3, (int)&a5) )
    {
      v9 = sub_411940((int)&a3, (int)&v13, 0);
      sub_410100(v10, (int)&v14, *(_DWORD *)v9, *(_DWORD *)(v9 + 4));
    }
    sub_4100B0(v10, a2, a3, a4);
    result = a2;
  }
  return result;
}

//----- (0040DDE0) --------------------------------------------------------
int __fastcall sub_40DDE0(int a1)
{
  int result; // eax@1
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)(v2 + 24) = sub_410BC0(a1);
  *(_BYTE *)sub_40DAF0(*(_DWORD *)(v2 + 24)) = 1;
  *(_DWORD *)sub_410A70(v2) = *(_DWORD *)(v2 + 24);
  *(_DWORD *)sub_40FC70(v2) = *(_DWORD *)(v2 + 24);
  *(_DWORD *)sub_40DA80(v2) = *(_DWORD *)(v2 + 24);
  result = v2;
  *(_DWORD *)(v2 + 28) = 0;
  return result;
}

//----- (0040DE50) --------------------------------------------------------
int __thiscall sub_40DE50(int this, int a2, char a3, int a4, int a5)
{
  int v6; // eax@12
  int v7; // esi@13
  int v8; // eax@13
  int v9; // eax@13
  int v10; // eax@14
  int v11; // eax@14
  int v12; // eax@15
  int v13; // eax@15
  int v14; // eax@15
  int v15; // eax@15
  int v16; // eax@16
  int v17; // eax@17
  int v18; // eax@18
  int v19; // eax@18
  int v20; // eax@18
  int v21; // eax@18
  int v22; // eax@18
  int v23; // eax@20
  int v24; // eax@20
  int v25; // eax@21
  int v26; // eax@21
  int v27; // eax@21
  int v28; // eax@21
  int v29; // eax@22
  int v30; // eax@23
  int v31; // eax@24
  int v32; // eax@24
  int v33; // eax@24
  int v34; // eax@24
  int v35; // eax@24
  int v36; // eax@26
  int v37; // [sp+8h] [bp-5Ch]@1
  char v38; // [sp+Ch] [bp-58h]@2
  signed int v39; // [sp+60h] [bp-4h]@2
  char v40; // [sp+28h] [bp-3Ch]@2
  int v41; // [sp+54h] [bp-10h]@3
  int v42; // [sp+50h] [bp-14h]@11

  v37 = this;
  if ( (unsigned int)(sub_4100E0() - 1) <= *(_DWORD *)(v37 + 28) )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v38);
    v39 = 0;
    sub_401270((int)&v40, (int)&v38);
    CxxThrowException(&v40, &unk_433D88);
    v39 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v38);
  }
  v41 = (int)sub_410D30(v37, *(_DWORD *)(v37 + 24), a4, *(_DWORD *)(v37 + 24), a5, 0);
  ++*(_DWORD *)(v37 + 28);
  if ( a4 == *(_DWORD *)(v37 + 24) )
  {
    *(_DWORD *)sub_410A70(v37) = v41;
    *(_DWORD *)sub_40FC70(v37) = v41;
    *(_DWORD *)sub_40DA80(v37) = v41;
  }
  else
  {
    if ( a3 )
    {
      *(_DWORD *)sub_40B0E0(a4) = v41;
      if ( a4 == *(_DWORD *)sub_40FC70(v37) )
        *(_DWORD *)sub_40FC70(v37) = v41;
    }
    else
    {
      *(_DWORD *)sub_40B0F0(a4) = v41;
      if ( a4 == *(_DWORD *)sub_40DA80(v37) )
        *(_DWORD *)sub_40DA80(v37) = v41;
    }
  }
  v42 = v41;
  while ( 1 )
  {
    v6 = sub_40E370(v42);
    if ( *(_BYTE *)sub_4100A0(*(_DWORD *)v6) )
      break;
    v7 = sub_40E370(v42);
    v8 = sub_40E370(v42);
    v9 = sub_40E370(*(_DWORD *)v8);
    if ( *(_DWORD *)v7 == *(_DWORD *)sub_40B0E0(*(_DWORD *)v9) )
    {
      v10 = sub_40E370(v42);
      v11 = sub_40E370(*(_DWORD *)v10);
      a4 = *(_DWORD *)sub_40B0F0(*(_DWORD *)v11);
      if ( *(_BYTE *)sub_4100A0(a4) )
      {
        v16 = sub_40E370(v42);
        if ( v42 == *(_DWORD *)sub_40B0F0(*(_DWORD *)v16) )
        {
          v17 = *(_DWORD *)sub_40E370(v42);
          v42 = v17;
          sub_410940(v37, v17);
        }
        v18 = sub_40E370(v42);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v18) = 1;
        v19 = sub_40E370(v42);
        v20 = sub_40E370(*(_DWORD *)v19);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v20) = 0;
        v21 = sub_40E370(v42);
        v22 = sub_40E370(*(_DWORD *)v21);
        sub_410A90(v37, *(_DWORD *)v22);
      }
      else
      {
        v12 = sub_40E370(v42);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v12) = 1;
        *(_BYTE *)sub_4100A0(a4) = 1;
        v13 = sub_40E370(v42);
        v14 = sub_40E370(*(_DWORD *)v13);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v14) = 0;
        v15 = sub_40E370(v42);
        v42 = *(_DWORD *)sub_40E370(*(_DWORD *)v15);
      }
    }
    else
    {
      v23 = sub_40E370(v42);
      v24 = sub_40E370(*(_DWORD *)v23);
      a4 = *(_DWORD *)sub_40B0E0(*(_DWORD *)v24);
      if ( *(_BYTE *)sub_4100A0(a4) )
      {
        v29 = sub_40E370(v42);
        if ( v42 == *(_DWORD *)sub_40B0E0(*(_DWORD *)v29) )
        {
          v30 = *(_DWORD *)sub_40E370(v42);
          v42 = v30;
          sub_410A90(v37, v30);
        }
        v31 = sub_40E370(v42);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v31) = 1;
        v32 = sub_40E370(v42);
        v33 = sub_40E370(*(_DWORD *)v32);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v33) = 0;
        v34 = sub_40E370(v42);
        v35 = sub_40E370(*(_DWORD *)v34);
        sub_410940(v37, *(_DWORD *)v35);
      }
      else
      {
        v25 = sub_40E370(v42);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v25) = 1;
        *(_BYTE *)sub_4100A0(a4) = 1;
        v26 = sub_40E370(v42);
        v27 = sub_40E370(*(_DWORD *)v26);
        *(_BYTE *)sub_4100A0(*(_DWORD *)v27) = 0;
        v28 = sub_40E370(v42);
        v42 = *(_DWORD *)sub_40E370(*(_DWORD *)v28);
      }
    }
  }
  v36 = sub_410A70(v37);
  *(_BYTE *)sub_4100A0(*(_DWORD *)v36) = 1;
  sub_40B870(a2, v41, v37);
  return a2;
}

//----- (0040E2D0) --------------------------------------------------------
int __thiscall sub_40E2D0(int this, int a2)
{
  int v3; // ST04_4@3
  int v4; // eax@3
  int v5; // [sp+0h] [bp-Ch]@1
  int v6; // [sp+4h] [bp-8h]@1
  int v7; // [sp+8h] [bp-4h]@1

  v5 = this;
  v6 = *(_DWORD *)sub_410A70(this);
  v7 = *(_DWORD *)(v5 + 24);
  while ( !*(_BYTE *)sub_40DAF0(v6) )
  {
    v3 = a2;
    v4 = sub_40A920(v6);
    if ( (unsigned __int8)sub_40A900(v4, v3) )
    {
      v6 = *(_DWORD *)sub_40B0F0(v6);
    }
    else
    {
      v7 = v6;
      v6 = *(_DWORD *)sub_40B0E0(v6);
    }
  }
  return v7;
}

//----- (0040E360) --------------------------------------------------------
int __cdecl sub_40E360(int a1)
{
  return a1 + 14;
}

//----- (0040E370) --------------------------------------------------------
int __cdecl sub_40E370(int a1)
{
  return a1 + 4;
}

//----- (0040E380) --------------------------------------------------------
int __cdecl sub_40E380()
{
  return unknown_libname_8();
}

//----- (0040E3A0) --------------------------------------------------------
int __thiscall sub_40E3A0(int this, int a2, int a3, int a4, char a5, int a6)
{
  int result; // eax@3
  int v7; // eax@1
  int v8; // eax@2
  int v9; // eax@5
  int v10; // [sp+0h] [bp-24h]@1
  char v11; // [sp+1Ch] [bp-8h]@1
  char v12; // [sp+14h] [bp-10h]@2
  char v13; // [sp+Ch] [bp-18h]@5
  char v14; // [sp+4h] [bp-20h]@5

  v10 = this;
  v7 = sub_40DB10(this, (int)&v11);
  if ( sub_411B90((int)&a3, v7) && (v8 = sub_408DE0(v10, (int)&v12), (unsigned __int8)sub_411B90((int)&a5, v8)) )
  {
    sub_409300(v10);
    sub_40DB10(v10, a2);
    result = a2;
  }
  else
  {
    while ( sub_40EA30((int)&a3, (int)&a5) )
    {
      v9 = sub_411BE0((int)&a3, (int)&v13, 0);
      sub_410E20(v10, (int)&v14, *(_DWORD *)v9, *(_DWORD *)(v9 + 4));
    }
    sub_4100B0(v10, a2, a3, a4);
    result = a2;
  }
  return result;
}

//----- (0040E450) --------------------------------------------------------
int __fastcall sub_40E450(int a1)
{
  int result; // eax@1
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)(v2 + 24) = sub_411640(a1);
  *(_BYTE *)sub_40B0D0(*(_DWORD *)(v2 + 24)) = 1;
  *(_DWORD *)sub_410A70(v2) = *(_DWORD *)(v2 + 24);
  *(_DWORD *)sub_40FC70(v2) = *(_DWORD *)(v2 + 24);
  *(_DWORD *)sub_40DA80(v2) = *(_DWORD *)(v2 + 24);
  result = v2;
  *(_DWORD *)(v2 + 28) = 0;
  return result;
}

//----- (0040E4C0) --------------------------------------------------------
int __thiscall sub_40E4C0(int this, int a2)
{
  int result; // eax@8
  int v3; // esi@1
  int v4; // eax@1
  int v5; // eax@2
  int v6; // esi@3
  int v7; // eax@5
  int v8; // eax@6
  int v9; // eax@7
  int v10; // [sp+4h] [bp-8h]@1
  int v11; // [sp+8h] [bp-4h]@1

  v10 = this;
  v11 = *(_DWORD *)sub_40B0F0(a2);
  v3 = sub_40B0E0(v11);
  *(_DWORD *)sub_40B0F0(a2) = *(_DWORD *)v3;
  v4 = sub_40B0E0(v11);
  if ( !*(_BYTE *)sub_40B0D0(*(_DWORD *)v4) )
  {
    v5 = sub_40B0E0(v11);
    *(_DWORD *)sub_40E370(*(_DWORD *)v5) = a2;
  }
  v6 = sub_40E370(a2);
  *(_DWORD *)sub_40E370(v11) = *(_DWORD *)v6;
  if ( a2 == *(_DWORD *)sub_410A70(v10) )
  {
    *(_DWORD *)sub_410A70(v10) = v11;
  }
  else
  {
    v7 = sub_40E370(a2);
    if ( a2 == *(_DWORD *)sub_40B0E0(*(_DWORD *)v7) )
    {
      v8 = sub_40E370(a2);
      *(_DWORD *)sub_40B0E0(*(_DWORD *)v8) = v11;
    }
    else
    {
      v9 = sub_40E370(a2);
      *(_DWORD *)sub_40B0F0(*(_DWORD *)v9) = v11;
    }
  }
  *(_DWORD *)sub_40B0E0(v11) = a2;
  result = sub_40E370(a2);
  *(_DWORD *)result = v11;
  return result;
}

//----- (0040E5F0) --------------------------------------------------------
int __thiscall sub_40E5F0(int this, int a2)
{
  int result; // eax@8
  int v3; // esi@1
  int v4; // eax@1
  int v5; // eax@2
  int v6; // esi@3
  int v7; // eax@5
  int v8; // eax@6
  int v9; // eax@7
  int v10; // [sp+4h] [bp-8h]@1
  int v11; // [sp+8h] [bp-4h]@1

  v10 = this;
  v11 = *(_DWORD *)sub_40B0E0(a2);
  v3 = sub_40B0F0(v11);
  *(_DWORD *)sub_40B0E0(a2) = *(_DWORD *)v3;
  v4 = sub_40B0F0(v11);
  if ( !*(_BYTE *)sub_40B0D0(*(_DWORD *)v4) )
  {
    v5 = sub_40B0F0(v11);
    *(_DWORD *)sub_40E370(*(_DWORD *)v5) = a2;
  }
  v6 = sub_40E370(a2);
  *(_DWORD *)sub_40E370(v11) = *(_DWORD *)v6;
  if ( a2 == *(_DWORD *)sub_410A70(v10) )
  {
    *(_DWORD *)sub_410A70(v10) = v11;
  }
  else
  {
    v7 = sub_40E370(a2);
    if ( a2 == *(_DWORD *)sub_40B0F0(*(_DWORD *)v7) )
    {
      v8 = sub_40E370(a2);
      *(_DWORD *)sub_40B0F0(*(_DWORD *)v8) = v11;
    }
    else
    {
      v9 = sub_40E370(a2);
      *(_DWORD *)sub_40B0E0(*(_DWORD *)v9) = v11;
    }
  }
  *(_DWORD *)sub_40B0F0(v11) = a2;
  result = sub_40E370(a2);
  *(_DWORD *)result = v11;
  return result;
}

//----- (0040E720) --------------------------------------------------------
void *__thiscall sub_40E720(int this, int a2, int a3, int a4, int a5, char a6)
{
  void *v7; // eax@1
  void *v8; // eax@1
  int v9; // [sp+0h] [bp-34h]@1
  int *v10; // [sp+24h] [bp-10h]@1
  int v11; // [sp+14h] [bp-20h]@1
  void *v12; // [sp+20h] [bp-14h]@1
  int v13; // [sp+30h] [bp-4h]@1
  int v14; // [sp+18h] [bp-1Ch]@1

  v10 = &v9;
  v11 = this;
  v7 = sub_4117B0(1u);
  v12 = v7;
  v13 = 0;
  v8 = operator new(0x10u, v7);
  v14 = (int)v8;
  if ( v8 )
    sub_411DD0(v14, a2, a3, a4, a5, a6);
  return v12;
}

//----- (0040E800) --------------------------------------------------------
int __stdcall sub_40E800(int a1)
{
  return _initp_misc_winxfltr();
}

//----- (0040E820) --------------------------------------------------------
signed int __cdecl sub_40E820()
{
  return sub_4117D0();
}

//----- (0040E840) --------------------------------------------------------
int __stdcall sub_40E840(void *a1, void *a2)
{
  return sub_4132D0(a1, a2);
}

//----- (0040E870) --------------------------------------------------------
void *__stdcall sub_40E870(unsigned int a1)
{
  return sub_413310(a1);
}

//----- (0040E890) --------------------------------------------------------
int __thiscall sub_40E890(int this, int a2, int a3)
{
  int v3; // edx@1
  int v4; // ecx@1
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  sub_40F310(this);
  v4 = a2;
  *(_DWORD *)(v6 + 4) = a2;
  if ( !a3 )
    invalid_parameter_noinfo(v4, v3);
  sub_401060(v6, a3);
  return v6;
}

//----- (0040E8D0) --------------------------------------------------------
int __fastcall sub_40E8D0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_411840(a1);
  return v2;
}

//----- (0040E8F0) --------------------------------------------------------
int __fastcall sub_40E8F0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_40F310(a1);
  *(_DWORD *)(v2 + 4) = 0;
  return v2;
}

//----- (0040E910) --------------------------------------------------------
int __fastcall sub_40E910(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_411AB0(a1);
  return v2;
}

//----- (0040E930) --------------------------------------------------------
int __fastcall sub_40E930(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_411980(a1);
  return v2;
}

//----- (0040E950) --------------------------------------------------------
int __thiscall sub_40E950(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(*(_DWORD *)(v7 + 4) + 380 * a2) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(*(_DWORD *)(v7 + 4) + 380 * a2) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += 380 * a2;
  return v7;
}

//----- (0040E9E0) --------------------------------------------------------
int __thiscall sub_40E9E0(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return (*(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4)) / 380;
}

//----- (0040EA30) --------------------------------------------------------
bool __thiscall sub_40EA30(int this, int a2)
{
  return (unsigned __int8)sub_411B90(this, a2) == 0;
}

//----- (0040EA60) --------------------------------------------------------
int __fastcall sub_40EA60(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_411C20(a1);
  return v2;
}

//----- (0040EA80) --------------------------------------------------------
int __fastcall sub_40EA80(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  int v3; // edx@3
  int v4; // ecx@3
  int result; // eax@4
  int v6; // eax@5
  int v7; // eax@6
  int v8; // [sp+0h] [bp-8h]@1
  int v9; // [sp+4h] [bp-4h]@7

  v8 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  v4 = *(_BYTE *)sub_40B0D0(*(_DWORD *)(v8 + 4));
  if ( v4 )
  {
    result = invalid_parameter_noinfo(v4, v3);
  }
  else
  {
    v6 = sub_40B0F0(*(_DWORD *)(v8 + 4));
    if ( *(_BYTE *)sub_40B0D0(*(_DWORD *)v6) )
    {
      while ( 1 )
      {
        v9 = *(_DWORD *)sub_40E370(*(_DWORD *)(v8 + 4));
        result = *(_BYTE *)sub_40B0D0(v9);
        if ( result )
          break;
        result = sub_40B0F0(v9);
        if ( *(_DWORD *)(v8 + 4) != *(_DWORD *)result )
          break;
        *(_DWORD *)(v8 + 4) = v9;
      }
      *(_DWORD *)(v8 + 4) = v9;
    }
    else
    {
      v7 = sub_40B0F0(*(_DWORD *)(v8 + 4));
      result = sub_411600(*(_DWORD *)v7);
      *(_DWORD *)(v8 + 4) = result;
    }
  }
  return result;
}

//----- (0040EB60) --------------------------------------------------------
int __thiscall sub_40EB60(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_411E20(a2, *(_DWORD *)(this + 16), this);
  return a2;
}

//----- (0040EB90) --------------------------------------------------------
int __thiscall sub_40EB90(int this, int a2, int a3, unsigned int a4, int a5, unsigned int a6)
{
  int v7; // eax@2
  int v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+10h] [bp-8h]@1
  char v10; // [sp+8h] [bp-10h]@1
  int v11; // [sp+Ch] [bp-Ch]@2
  int v12; // [sp+14h] [bp-4h]@2
  int v13; // [sp+4h] [bp-14h]@2

  v8 = this;
  sub_411D50(this, (int)&v9, a3, a4);
  sub_411D50(v8, (int)&v10, a5, a6);
  if ( sub_40EA30((int)&v9, (int)&v10) )
  {
    v7 = sub_413360(v11, *(_DWORD *)(v8 + 16), v12);
    v13 = v7;
    sub_40EC30((void *)v7, *(void **)(v8 + 16));
    *(_DWORD *)(v8 + 16) = v13;
  }
  *(_DWORD *)a2 = v9;
  *(_DWORD *)(a2 + 4) = v12;
  return a2;
}

//----- (0040EC30) --------------------------------------------------------
int __stdcall sub_40EC30(void *a1, void *a2)
{
  return sub_4133D0(a1, a2);
}

//----- (0040EC60) --------------------------------------------------------
void *__thiscall sub_40EC60(int this, int a2, int a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int  s; // [sp+78h] [bp+0h]@1
  unsigned int v11; // [sp+58h] [bp-20h]@1
  int v12; // [sp-4h] [bp-7Ch]@1
  int *v13; // [sp+68h] [bp-10h]@1
  int v14; // [sp+18h] [bp-60h]@1
  int v15; // [sp+64h] [bp-14h]@1
  int v16; // [sp+14h] [bp-64h]@7
  void *v17; // [sp+5Ch] [bp-1Ch]@11
  void *v18; // [sp+60h] [bp-18h]@11
  signed int v19; // [sp+74h] [bp-4h]@11
  void *v20; // [sp+10h] [bp-68h]@11
  int v21; // [sp+Ch] [bp-6Ch]@11
  char v22; // [sp+3Ch] [bp-3Ch]@15
  int v23; // [sp+38h] [bp-40h]@16
  char v24; // [sp+1Ch] [bp-5Ch]@16

  v11 = (unsigned int)& s ^ dword_43901C;
  v13 = &v12;
  v14 = this;
  result = (void *)sub_4022A0(this);
  v15 = (int)result;
  if ( a4 )
  {
    v6 = sub_4095F0(v14);
    if ( sub_402BC0() - v6 >= (unsigned int)a4 )
    {
      if ( v15 >= (unsigned int)(a4 + sub_4095F0(v14)) )
      {
        if ( (*(_DWORD *)(v14 + 16) - a3) / 28 >= (unsigned int)a4 )
        {
          std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a5);
          v19 = 5;
          v23 = *(_DWORD *)(v14 + 16);
          *(_DWORD *)(v14 + 16) = unknown_libname_16(v23 - 28 * a4, v23, *(_DWORD *)(v14 + 16));
          sub_413470(a3, v23 - 28 * a4, v23);
          sub_413440(a3, (_BYTE)a3 + 28 * (_BYTE)a4);
          v19 = -1;
          result = (void *)std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v24);
        }
        else
        {
          std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a5);
          v19 = 2;
          unknown_libname_16(a3, *(_DWORD *)(v14 + 16), a3 + 28 * a4);
          LOBYTE(v19) = 3;
          sub_40F010(*(void **)(v14 + 16), a4 - (*(_DWORD *)(v14 + 16) - a3) / 28, (int)&v22);
          v19 = 2;
          *(_DWORD *)(v14 + 16) += 28 * a4;
          sub_413440(a3, *(_DWORD *)(v14 + 16) - 28 * a4);
          v19 = -1;
          result = (void *)std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v22);
        }
      }
      else
      {
        if ( sub_402BC0() - ((unsigned int)v15 >> 1) >= v15 )
          v16 = v15 + ((unsigned int)v15 >> 1);
        else
          v16 = 0;
        v15 = v16;
        if ( v15 < (unsigned int)(a4 + sub_4095F0(v14)) )
          v15 = a4 + sub_4095F0(v14);
        v7 = sub_402F80(v15);
        v17 = v7;
        v18 = v7;
        v19 = 0;
        v8 = (void *)unknown_libname_16(*(_DWORD *)(v14 + 12), a3, v7);
        v20 = v8;
        v18 = v8;
        v9 = sub_40F010(v8, a4, a5);
        v21 = v9;
        v18 = (void *)v9;
        unknown_libname_16(a3, *(_DWORD *)(v14 + 16), v9);
        v19 = -1;
        a4 += sub_4095F0(v14);
        if ( *(_DWORD *)(v14 + 12) )
        {
          sub_40EC30(*(void **)(v14 + 12), *(void **)(v14 + 16));
          unknown_libname_2(*(void **)(v14 + 12), (*(_DWORD *)(v14 + 20) - *(_DWORD *)(v14 + 12)) / 28);
        }
        *(_DWORD *)(v14 + 20) = (char *)v17 + 28 * v15;
        *(_DWORD *)(v14 + 16) = (char *)v17 + 28 * a4;
        result = v17;
        *(_DWORD *)(v14 + 12) = v17;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (0040F010) --------------------------------------------------------
int __stdcall sub_40F010(void *a1, int a2, int a3)
{
  sub_4134E0(a1, a2, a3);
  return (int)((char *)a1 + 28 * a2);
}

//----- (0040F050) --------------------------------------------------------
int __thiscall sub_40F050(int this, int a2)
{
  int v3; // eax@2
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  *(_DWORD *)this = a2;
  if ( std__basic_ios_char_std__char_traits_char____rdp->pkt.uin(*(_DWORD *)(**(_DWORD **)v4 + 4) + *(_DWORD *)v4, v4) )
  {
    v3 = std__basic_ios_char_std__char_traits_char____rdp->pkt.uin(
           *(_DWORD *)(**(_DWORD **)v4 + 4) + *(_DWORD *)v4,
           *(_DWORD *)v4);
    std__basic_streamp->pkt.uin_char_std__char_traits_char_____Lock(v3);
  }
  return v4;
}

//----- (0040F0A0) --------------------------------------------------------
int __fastcall sub_40F0A0(int a1)
{
  int result; // eax@1
  int v2; // eax@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = a1;
  result = std__basic_ios_char_std__char_traits_char____rdp->pkt.uin(
             *(_DWORD *)(**(_DWORD **)a1 + 4) + *(_DWORD *)a1,
             **(_DWORD **)a1);
  if ( result )
  {
    v2 = std__basic_ios_char_std__char_traits_char____rdp->pkt.uin(
           *(_DWORD *)(**(_DWORD **)v3 + 4) + *(_DWORD *)v3,
           *(_DWORD *)v3);
    result = std__basic_streamp->pkt.uin_char_std__char_traits_char_____Unlock(v2);
  }
  return result;
}

//----- (0040F0F0) --------------------------------------------------------
int __thiscall sub_40F0F0(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_411D70((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (0040F130) --------------------------------------------------------
int __thiscall sub_40F130(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return (*(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4)) >> 5;
}

//----- (0040F180) --------------------------------------------------------
int __thiscall sub_40F180(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_411D90((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (0040F1C0) --------------------------------------------------------
int __thiscall sub_40F1C0(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return (*(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4)) >> 2;
}

//----- (0040F210) --------------------------------------------------------
int __thiscall sub_40F210(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_411DB0((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (0040F250) --------------------------------------------------------
int __thiscall sub_40F250(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return (*(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4)) >> 1;
}

//----- (0040F2A0) --------------------------------------------------------
int __thiscall sub_40F2A0(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_411E40((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (0040F2E0) --------------------------------------------------------
int __thiscall sub_40F2E0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  *(_BYTE *)(v3 + 28) = *(_BYTE *)(a2 + 28);
  return v3;
}

//----- (0040F310) --------------------------------------------------------
int __fastcall sub_40F310(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  std___String_base___String_base();
  return v2;
}

//----- (0040F330) --------------------------------------------------------
int __thiscall sub_40F330(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_412330(a2, *(_DWORD *)(this + 16), this);
  return a2;
}

//----- (0040F360) --------------------------------------------------------
signed int __cdecl sub_40F360()
{
  return 134217727;
}

//----- (0040F390) --------------------------------------------------------
signed int __cdecl sub_40F390()
{
  return 11302545;
}

//----- (0040F3C0) --------------------------------------------------------
signed int __cdecl sub_40F3C0()
{
  return 1073741823;
}

//----- (0040F420) --------------------------------------------------------
int __cdecl sub_40F420(int a1)
{
  return a1 + 196;
}

//----- (0040F430) --------------------------------------------------------
int __thiscall sub_40F430(int this, int a2, int a3, int a4)
{
  int v5; // eax@1
  int v6; // eax@3
  int v7; // eax@5
  int v8; // eax@7
  int v9; // eax@27
  int v10; // esi@27
  int v11; // esi@31
  int v12; // eax@31
  int v13; // eax@34
  int v14; // eax@35
  int v15; // eax@36
  int v16; // esi@37
  int v17; // ST08_4@37
  int v18; // eax@37
  int v19; // eax@42
  int v20; // eax@46
  int v21; // eax@47
  int v22; // eax@49
  int v23; // eax@50
  int v24; // esi@51
  int v25; // eax@51
  int v26; // eax@57
  int v27; // eax@58
  int v28; // eax@60
  int v29; // eax@61
  int v30; // esi@62
  int v31; // eax@62
  int v32; // [sp+10h] [bp-64h]@1
  char v33; // [sp+14h] [bp-60h]@2
  signed int v34; // [sp+70h] [bp-4h]@2
  char v35; // [sp+30h] [bp-44h]@2
  void *v36; // [sp+64h] [bp-10h]@3
  int v37; // [sp+5Ch] [bp-18h]@3
  int v38; // [sp+60h] [bp-14h]@4
  int v39; // [sp+58h] [bp-1Ch]@9
  int v40; // [sp+Ch] [bp-68h]@18
  int v41; // [sp+8h] [bp-6Ch]@23

  v32 = this;
  v5 = sub_415300();
  if ( *(_BYTE *)sub_40D950(v5) )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v33);
    v34 = 0;
    sub_406350((int)&v35, (int)&v33);
    CxxThrowException(&v35, &unk_433DFC);
    v34 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v33);
  }
  v36 = (void *)sub_415300();
  sub_40E8D0((int)&a3);
  v37 = (int)v36;
  v6 = sub_40B0E0((int)v36);
  if ( *(_BYTE *)sub_40D950(*(_DWORD *)v6) )
  {
    v38 = *(_DWORD *)sub_40B0F0(v37);
  }
  else
  {
    v7 = sub_40B0F0(v37);
    if ( *(_BYTE *)sub_40D950(*(_DWORD *)v7) )
    {
      v38 = *(_DWORD *)sub_40B0E0(v37);
    }
    else
    {
      v8 = sub_415300();
      v37 = v8;
      v38 = *(_DWORD *)sub_40B0F0(v8);
    }
  }
  if ( v37 == (_DWORD)v36 )
  {
    v39 = *(_DWORD *)sub_40E370((int)v36);
    if ( !*(_BYTE *)sub_40D950(v38) )
      *(_DWORD *)sub_40E370(v38) = v39;
    if ( *(_DWORD *)sub_410A70(v32) == (_DWORD)v36 )
    {
      *(_DWORD *)sub_410A70(v32) = v38;
    }
    else
    {
      if ( *(_DWORD *)sub_40B0E0(v39) == (_DWORD)v36 )
        *(_DWORD *)sub_40B0E0(v39) = v38;
      else
        *(_DWORD *)sub_40B0F0(v39) = v38;
    }
    if ( *(_DWORD *)sub_40FC70(v32) == (_DWORD)v36 )
    {
      if ( *(_BYTE *)sub_40D950(v38) )
        v40 = v39;
      else
        v40 = sub_411F20(v38);
      *(_DWORD *)sub_40FC70(v32) = v40;
    }
    if ( *(_DWORD *)sub_40DA80(v32) == (_DWORD)v36 )
    {
      if ( *(_BYTE *)sub_40D950(v38) )
        v41 = v39;
      else
        v41 = sub_411EE0(v38);
      *(_DWORD *)sub_40DA80(v32) = v41;
    }
  }
  else
  {
    v9 = sub_40B0E0((int)v36);
    *(_DWORD *)sub_40E370(*(_DWORD *)v9) = v37;
    v10 = sub_40B0E0((int)v36);
    *(_DWORD *)sub_40B0E0(v37) = *(_DWORD *)v10;
    if ( v37 == *(_DWORD *)sub_40B0F0((int)v36) )
    {
      v39 = v37;
    }
    else
    {
      v39 = *(_DWORD *)sub_40E370(v37);
      if ( !*(_BYTE *)sub_40D950(v38) )
        *(_DWORD *)sub_40E370(v38) = v39;
      *(_DWORD *)sub_40B0E0(v39) = v38;
      v11 = sub_40B0F0((int)v36);
      *(_DWORD *)sub_40B0F0(v37) = *(_DWORD *)v11;
      v12 = sub_40B0F0((int)v36);
      *(_DWORD *)sub_40E370(*(_DWORD *)v12) = v37;
    }
    if ( *(_DWORD *)sub_410A70(v32) == (_DWORD)v36 )
    {
      *(_DWORD *)sub_410A70(v32) = v37;
    }
    else
    {
      v13 = sub_40E370((int)v36);
      if ( *(_DWORD *)sub_40B0E0(*(_DWORD *)v13) == (_DWORD)v36 )
      {
        v14 = sub_40E370((int)v36);
        *(_DWORD *)sub_40B0E0(*(_DWORD *)v14) = v37;
      }
      else
      {
        v15 = sub_40E370((int)v36);
        *(_DWORD *)sub_40B0F0(*(_DWORD *)v15) = v37;
      }
    }
    v16 = sub_40E370((int)v36);
    *(_DWORD *)sub_40E370(v37) = *(_DWORD *)v16;
    v17 = sub_40F420((int)v36);
    v18 = sub_40F420(v37);
    sub_413530(v18, v17);
  }
  if ( *(_BYTE *)sub_40F420((int)v36) == 1 )
  {
    while ( v38 != *(_DWORD *)sub_410A70(v32) && *(_BYTE *)sub_40F420(v38) == 1 )
    {
      if ( v38 == *(_DWORD *)sub_40B0E0(v39) )
      {
        v19 = *(_DWORD *)sub_40B0F0(v39);
        v37 = v19;
        if ( !*(_BYTE *)sub_40F420(v19) )
        {
          *(_BYTE *)sub_40F420(v37) = 1;
          *(_BYTE *)sub_40F420(v39) = 0;
          sub_40FC90(v32, v39);
          v37 = *(_DWORD *)sub_40B0F0(v39);
        }
        if ( *(_BYTE *)sub_40D950(v37) )
        {
          v38 = v39;
        }
        else
        {
          v20 = sub_40B0E0(v37);
          if ( *(_BYTE *)sub_40F420(*(_DWORD *)v20) != 1
            || (v21 = sub_40B0F0(v37), *(_BYTE *)sub_40F420(*(_DWORD *)v21) != 1) )
          {
            v22 = sub_40B0F0(v37);
            if ( *(_BYTE *)sub_40F420(*(_DWORD *)v22) == 1 )
            {
              v23 = sub_40B0E0(v37);
              *(_BYTE *)sub_40F420(*(_DWORD *)v23) = 1;
              *(_BYTE *)sub_40F420(v37) = 0;
              sub_40FDC0(v32, v37);
              v37 = *(_DWORD *)sub_40B0F0(v39);
            }
            v24 = sub_40F420(v39);
            *(_BYTE *)sub_40F420(v37) = *(_BYTE *)v24;
            *(_BYTE *)sub_40F420(v39) = 1;
            v25 = sub_40B0F0(v37);
            *(_BYTE *)sub_40F420(*(_DWORD *)v25) = 1;
            sub_40FC90(v32, v39);
            break;
          }
          *(_BYTE *)sub_40F420(v37) = 0;
          v38 = v39;
        }
      }
      else
      {
        v37 = *(_DWORD *)sub_40B0E0(v39);
        if ( !*(_BYTE *)sub_40F420(v37) )
        {
          *(_BYTE *)sub_40F420(v37) = 1;
          *(_BYTE *)sub_40F420(v39) = 0;
          sub_40FDC0(v32, v39);
          v37 = *(_DWORD *)sub_40B0E0(v39);
        }
        if ( *(_BYTE *)sub_40D950(v37) )
        {
          v38 = v39;
        }
        else
        {
          v26 = sub_40B0F0(v37);
          if ( *(_BYTE *)sub_40F420(*(_DWORD *)v26) != 1
            || (v27 = sub_40B0E0(v37), *(_BYTE *)sub_40F420(*(_DWORD *)v27) != 1) )
          {
            v28 = sub_40B0E0(v37);
            if ( *(_BYTE *)sub_40F420(*(_DWORD *)v28) == 1 )
            {
              v29 = sub_40B0F0(v37);
              *(_BYTE *)sub_40F420(*(_DWORD *)v29) = 1;
              *(_BYTE *)sub_40F420(v37) = 0;
              sub_40FC90(v32, v37);
              v37 = *(_DWORD *)sub_40B0E0(v39);
            }
            v30 = sub_40F420(v39);
            *(_BYTE *)sub_40F420(v37) = *(_BYTE *)v30;
            *(_BYTE *)sub_40F420(v39) = 1;
            v31 = sub_40B0E0(v37);
            *(_BYTE *)sub_40F420(*(_DWORD *)v31) = 1;
            sub_40FDC0(v32, v39);
            break;
          }
          *(_BYTE *)sub_40F420(v37) = 0;
          v38 = v39;
        }
      }
      v39 = *(_DWORD *)sub_40E370(v38);
    }
    *(_BYTE *)sub_40F420(v38) = 1;
  }
  sub_411FC0(v36);
  unknown_libname_2(v36, 1);
  if ( *(_DWORD *)(v32 + 28) )
    --*(_DWORD *)(v32 + 28);
  sub_4100B0(v32, a2, a3, a4);
  return a2;
}

//----- (0040FC10) --------------------------------------------------------
int __fastcall sub_40FC10(int a1)
{
  int result; // eax@1
  int v2; // eax@1
  int v3; // [sp+0h] [bp-4h]@1

  v3 = a1;
  v2 = sub_410A70(a1);
  sub_411E60(v3, *(void **)v2);
  *(_DWORD *)sub_410A70(v3) = *(_DWORD *)(v3 + 24);
  *(_DWORD *)(v3 + 28) = 0;
  *(_DWORD *)sub_40FC70(v3) = *(_DWORD *)(v3 + 24);
  result = sub_40DA80(v3);
  *(_DWORD *)result = *(_DWORD *)(v3 + 24);
  return result;
}

//----- (0040FC70) --------------------------------------------------------
int __fastcall sub_40FC70(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return sub_40B0E0(*(_DWORD *)(a1 + 24));
}

//----- (0040FC90) --------------------------------------------------------
int __thiscall sub_40FC90(int this, int a2)
{
  int result; // eax@8
  int v3; // esi@1
  int v4; // eax@1
  int v5; // eax@2
  int v6; // esi@3
  int v7; // eax@5
  int v8; // eax@6
  int v9; // eax@7
  int v10; // [sp+4h] [bp-8h]@1
  int v11; // [sp+8h] [bp-4h]@1

  v10 = this;
  v11 = *(_DWORD *)sub_40B0F0(a2);
  v3 = sub_40B0E0(v11);
  *(_DWORD *)sub_40B0F0(a2) = *(_DWORD *)v3;
  v4 = sub_40B0E0(v11);
  if ( !*(_BYTE *)sub_40D950(*(_DWORD *)v4) )
  {
    v5 = sub_40B0E0(v11);
    *(_DWORD *)sub_40E370(*(_DWORD *)v5) = a2;
  }
  v6 = sub_40E370(a2);
  *(_DWORD *)sub_40E370(v11) = *(_DWORD *)v6;
  if ( a2 == *(_DWORD *)sub_410A70(v10) )
  {
    *(_DWORD *)sub_410A70(v10) = v11;
  }
  else
  {
    v7 = sub_40E370(a2);
    if ( a2 == *(_DWORD *)sub_40B0E0(*(_DWORD *)v7) )
    {
      v8 = sub_40E370(a2);
      *(_DWORD *)sub_40B0E0(*(_DWORD *)v8) = v11;
    }
    else
    {
      v9 = sub_40E370(a2);
      *(_DWORD *)sub_40B0F0(*(_DWORD *)v9) = v11;
    }
  }
  *(_DWORD *)sub_40B0E0(v11) = a2;
  result = sub_40E370(a2);
  *(_DWORD *)result = v11;
  return result;
}

//----- (0040FDC0) --------------------------------------------------------
int __thiscall sub_40FDC0(int this, int a2)
{
  int result; // eax@8
  int v3; // esi@1
  int v4; // eax@1
  int v5; // eax@2
  int v6; // esi@3
  int v7; // eax@5
  int v8; // eax@6
  int v9; // eax@7
  int v10; // [sp+4h] [bp-8h]@1
  int v11; // [sp+8h] [bp-4h]@1

  v10 = this;
  v11 = *(_DWORD *)sub_40B0E0(a2);
  v3 = sub_40B0F0(v11);
  *(_DWORD *)sub_40B0E0(a2) = *(_DWORD *)v3;
  v4 = sub_40B0F0(v11);
  if ( !*(_BYTE *)sub_40D950(*(_DWORD *)v4) )
  {
    v5 = sub_40B0F0(v11);
    *(_DWORD *)sub_40E370(*(_DWORD *)v5) = a2;
  }
  v6 = sub_40E370(a2);
  *(_DWORD *)sub_40E370(v11) = *(_DWORD *)v6;
  if ( a2 == *(_DWORD *)sub_410A70(v10) )
  {
    *(_DWORD *)sub_410A70(v10) = v11;
  }
  else
  {
    v7 = sub_40E370(a2);
    if ( a2 == *(_DWORD *)sub_40B0F0(*(_DWORD *)v7) )
    {
      v8 = sub_40E370(a2);
      *(_DWORD *)sub_40B0F0(*(_DWORD *)v8) = v11;
    }
    else
    {
      v9 = sub_40E370(a2);
      *(_DWORD *)sub_40B0E0(*(_DWORD *)v9) = v11;
    }
  }
  *(_DWORD *)sub_40B0F0(v11) = a2;
  result = sub_40E370(a2);
  *(_DWORD *)result = v11;
  return result;
}

//----- (0040FEF0) --------------------------------------------------------
void *__fastcall sub_40FEF0(int a1)
{
  void *v2; // eax@1
  int v3; // eax@1
  int v4; // eax@1
  int v5; // eax@1
  int v6; // [sp+0h] [bp-38h]@1
  int *v7; // [sp+28h] [bp-10h]@1
  int v8; // [sp+10h] [bp-28h]@1
  void *v9; // [sp+20h] [bp-18h]@1
  int v10; // [sp+24h] [bp-14h]@1
  signed int v11; // [sp+34h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp-1Ch]@1
  int v13; // [sp+18h] [bp-20h]@1
  int v14; // [sp+14h] [bp-24h]@1

  v7 = &v6;
  v8 = a1;
  v2 = sub_411FA0(1u);
  v9 = v2;
  v10 = 0;
  v11 = 0;
  v12 = 0;
  v3 = sub_40B0E0((int)v2);
  sub_411FE0((void *)v3, &v12);
  ++v10;
  v13 = 0;
  v4 = sub_40E370((int)v9);
  sub_411FE0((void *)v4, &v13);
  ++v10;
  v14 = 0;
  v5 = sub_40B0F0((int)v9);
  sub_411FE0((void *)v5, &v14);
  v11 = -1;
  *(_BYTE *)sub_40F420((int)v9) = 1;
  *(_BYTE *)sub_40D950((int)v9) = 0;
  return v9;
}

//----- (00410060) --------------------------------------------------------
int __thiscall sub_410060(int this, int *a2, char a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+0h] [bp-8h]@1
  char *v6; // [sp+4h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  std___Init_locks__operator_(&a3);
  sub_411F60(v5, a2, v4);
  std___Init_locks__operator_(&a3);
  return v5;
}

//----- (004100A0) --------------------------------------------------------
int __cdecl sub_4100A0(int a1)
{
  return a1 + 1216;
}

//----- (004100B0) --------------------------------------------------------
int __thiscall sub_4100B0(int this, int a2, int a3, int a4)
{
  int v5; // eax@1
  int v6; // edx@1
  int v7; // eax@1
  int v8; // [sp+0h] [bp-Ch]@1
  char v9; // [sp+4h] [bp-8h]@1

  v8 = this;
  v5 = sub_40B870((int)&v9, a4, this);
  v6 = *(_DWORD *)v5;
  v7 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = v6;
  *(_DWORD *)(a2 + 4) = v7;
  return a2;
}

//----- (004100E0) --------------------------------------------------------
signed int __cdecl sub_4100E0()
{
  return sub_412100();
}

//----- (00410100) --------------------------------------------------------
int __thiscall sub_410100(int this, int a2, int a3, int a4)
{
  int v5; // eax@1
  int v6; // eax@3
  int v7; // eax@5
  int v8; // eax@7
  int v9; // eax@27
  int v10; // esi@27
  int v11; // esi@31
  int v12; // eax@31
  int v13; // eax@34
  int v14; // eax@35
  int v15; // eax@36
  int v16; // esi@37
  int v17; // ST08_4@37
  int v18; // eax@37
  int v19; // eax@42
  int v20; // eax@46
  int v21; // eax@47
  int v22; // eax@49
  int v23; // eax@50
  int v24; // esi@51
  int v25; // eax@51
  int v26; // eax@57
  int v27; // eax@58
  int v28; // eax@60
  int v29; // eax@61
  int v30; // esi@62
  int v31; // eax@62
  int v32; // [sp+10h] [bp-64h]@1
  char v33; // [sp+14h] [bp-60h]@2
  signed int v34; // [sp+70h] [bp-4h]@2
  char v35; // [sp+30h] [bp-44h]@2
  void *v36; // [sp+64h] [bp-10h]@3
  int v37; // [sp+5Ch] [bp-18h]@3
  int v38; // [sp+60h] [bp-14h]@4
  int v39; // [sp+58h] [bp-1Ch]@9
  int v40; // [sp+Ch] [bp-68h]@18
  int v41; // [sp+8h] [bp-6Ch]@23

  v32 = this;
  v5 = sub_415300();
  if ( *(_BYTE *)sub_40DAF0(v5) )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v33);
    v34 = 0;
    sub_406350((int)&v35, (int)&v33);
    CxxThrowException(&v35, &unk_433DFC);
    v34 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v33);
  }
  v36 = (void *)sub_415300();
  sub_40E910((int)&a3);
  v37 = (int)v36;
  v6 = sub_40B0E0((int)v36);
  if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v6) )
  {
    v38 = *(_DWORD *)sub_40B0F0(v37);
  }
  else
  {
    v7 = sub_40B0F0(v37);
    if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v7) )
    {
      v38 = *(_DWORD *)sub_40B0E0(v37);
    }
    else
    {
      v8 = sub_415300();
      v37 = v8;
      v38 = *(_DWORD *)sub_40B0F0(v8);
    }
  }
  if ( v37 == (_DWORD)v36 )
  {
    v39 = *(_DWORD *)sub_40E370((int)v36);
    if ( !*(_BYTE *)sub_40DAF0(v38) )
      *(_DWORD *)sub_40E370(v38) = v39;
    if ( *(_DWORD *)sub_410A70(v32) == (_DWORD)v36 )
    {
      *(_DWORD *)sub_410A70(v32) = v38;
    }
    else
    {
      if ( *(_DWORD *)sub_40B0E0(v39) == (_DWORD)v36 )
        *(_DWORD *)sub_40B0E0(v39) = v38;
      else
        *(_DWORD *)sub_40B0F0(v39) = v38;
    }
    if ( *(_DWORD *)sub_40FC70(v32) == (_DWORD)v36 )
    {
      if ( *(_BYTE *)sub_40DAF0(v38) )
        v40 = v39;
      else
        v40 = sub_4120C0(v38);
      *(_DWORD *)sub_40FC70(v32) = v40;
    }
    if ( *(_DWORD *)sub_40DA80(v32) == (_DWORD)v36 )
    {
      if ( *(_BYTE *)sub_40DAF0(v38) )
        v41 = v39;
      else
        v41 = sub_412080(v38);
      *(_DWORD *)sub_40DA80(v32) = v41;
    }
  }
  else
  {
    v9 = sub_40B0E0((int)v36);
    *(_DWORD *)sub_40E370(*(_DWORD *)v9) = v37;
    v10 = sub_40B0E0((int)v36);
    *(_DWORD *)sub_40B0E0(v37) = *(_DWORD *)v10;
    if ( v37 == *(_DWORD *)sub_40B0F0((int)v36) )
    {
      v39 = v37;
    }
    else
    {
      v39 = *(_DWORD *)sub_40E370(v37);
      if ( !*(_BYTE *)sub_40DAF0(v38) )
        *(_DWORD *)sub_40E370(v38) = v39;
      *(_DWORD *)sub_40B0E0(v39) = v38;
      v11 = sub_40B0F0((int)v36);
      *(_DWORD *)sub_40B0F0(v37) = *(_DWORD *)v11;
      v12 = sub_40B0F0((int)v36);
      *(_DWORD *)sub_40E370(*(_DWORD *)v12) = v37;
    }
    if ( *(_DWORD *)sub_410A70(v32) == (_DWORD)v36 )
    {
      *(_DWORD *)sub_410A70(v32) = v37;
    }
    else
    {
      v13 = sub_40E370((int)v36);
      if ( *(_DWORD *)sub_40B0E0(*(_DWORD *)v13) == (_DWORD)v36 )
      {
        v14 = sub_40E370((int)v36);
        *(_DWORD *)sub_40B0E0(*(_DWORD *)v14) = v37;
      }
      else
      {
        v15 = sub_40E370((int)v36);
        *(_DWORD *)sub_40B0F0(*(_DWORD *)v15) = v37;
      }
    }
    v16 = sub_40E370((int)v36);
    *(_DWORD *)sub_40E370(v37) = *(_DWORD *)v16;
    v17 = sub_4100A0((int)v36);
    v18 = sub_4100A0(v37);
    sub_413530(v18, v17);
  }
  if ( *(_BYTE *)sub_4100A0((int)v36) == 1 )
  {
    while ( v38 != *(_DWORD *)sub_410A70(v32) && *(_BYTE *)sub_4100A0(v38) == 1 )
    {
      if ( v38 == *(_DWORD *)sub_40B0E0(v39) )
      {
        v19 = *(_DWORD *)sub_40B0F0(v39);
        v37 = v19;
        if ( !*(_BYTE *)sub_4100A0(v19) )
        {
          *(_BYTE *)sub_4100A0(v37) = 1;
          *(_BYTE *)sub_4100A0(v39) = 0;
          sub_410940(v32, v39);
          v37 = *(_DWORD *)sub_40B0F0(v39);
        }
        if ( *(_BYTE *)sub_40DAF0(v37) )
        {
          v38 = v39;
        }
        else
        {
          v20 = sub_40B0E0(v37);
          if ( *(_BYTE *)sub_4100A0(*(_DWORD *)v20) != 1
            || (v21 = sub_40B0F0(v37), *(_BYTE *)sub_4100A0(*(_DWORD *)v21) != 1) )
          {
            v22 = sub_40B0F0(v37);
            if ( *(_BYTE *)sub_4100A0(*(_DWORD *)v22) == 1 )
            {
              v23 = sub_40B0E0(v37);
              *(_BYTE *)sub_4100A0(*(_DWORD *)v23) = 1;
              *(_BYTE *)sub_4100A0(v37) = 0;
              sub_410A90(v32, v37);
              v37 = *(_DWORD *)sub_40B0F0(v39);
            }
            v24 = sub_4100A0(v39);
            *(_BYTE *)sub_4100A0(v37) = *(_BYTE *)v24;
            *(_BYTE *)sub_4100A0(v39) = 1;
            v25 = sub_40B0F0(v37);
            *(_BYTE *)sub_4100A0(*(_DWORD *)v25) = 1;
            sub_410940(v32, v39);
            break;
          }
          *(_BYTE *)sub_4100A0(v37) = 0;
          v38 = v39;
        }
      }
      else
      {
        v37 = *(_DWORD *)sub_40B0E0(v39);
        if ( !*(_BYTE *)sub_4100A0(v37) )
        {
          *(_BYTE *)sub_4100A0(v37) = 1;
          *(_BYTE *)sub_4100A0(v39) = 0;
          sub_410A90(v32, v39);
          v37 = *(_DWORD *)sub_40B0E0(v39);
        }
        if ( *(_BYTE *)sub_40DAF0(v37) )
        {
          v38 = v39;
        }
        else
        {
          v26 = sub_40B0F0(v37);
          if ( *(_BYTE *)sub_4100A0(*(_DWORD *)v26) != 1
            || (v27 = sub_40B0E0(v37), *(_BYTE *)sub_4100A0(*(_DWORD *)v27) != 1) )
          {
            v28 = sub_40B0E0(v37);
            if ( *(_BYTE *)sub_4100A0(*(_DWORD *)v28) == 1 )
            {
              v29 = sub_40B0F0(v37);
              *(_BYTE *)sub_4100A0(*(_DWORD *)v29) = 1;
              *(_BYTE *)sub_4100A0(v37) = 0;
              sub_410940(v32, v37);
              v37 = *(_DWORD *)sub_40B0E0(v39);
            }
            v30 = sub_4100A0(v39);
            *(_BYTE *)sub_4100A0(v37) = *(_BYTE *)v30;
            *(_BYTE *)sub_4100A0(v39) = 1;
            v31 = sub_40B0E0(v37);
            *(_BYTE *)sub_4100A0(*(_DWORD *)v31) = 1;
            sub_410A90(v32, v39);
            break;
          }
          *(_BYTE *)sub_4100A0(v37) = 0;
          v38 = v39;
        }
      }
      v39 = *(_DWORD *)sub_40E370(v38);
    }
    *(_BYTE *)sub_4100A0(v38) = 1;
  }
  sub_412150(v36);
  unknown_libname_2(v36, 1);
  if ( *(_DWORD *)(v32 + 28) )
    --*(_DWORD *)(v32 + 28);
  sub_4100B0(v32, a2, a3, a4);
  return a2;
}

//----- (004108E0) --------------------------------------------------------
int __fastcall sub_4108E0(int a1)
{
  int result; // eax@1
  int v2; // eax@1
  int v3; // [sp+0h] [bp-4h]@1

  v3 = a1;
  v2 = sub_410A70(a1);
  sub_412000(v3, *(void **)v2);
  *(_DWORD *)sub_410A70(v3) = *(_DWORD *)(v3 + 24);
  *(_DWORD *)(v3 + 28) = 0;
  *(_DWORD *)sub_40FC70(v3) = *(_DWORD *)(v3 + 24);
  result = sub_40DA80(v3);
  *(_DWORD *)result = *(_DWORD *)(v3 + 24);
  return result;
}

//----- (00410940) --------------------------------------------------------
int __thiscall sub_410940(int this, int a2)
{
  int result; // eax@8
  int v3; // esi@1
  int v4; // eax@1
  int v5; // eax@2
  int v6; // esi@3
  int v7; // eax@5
  int v8; // eax@6
  int v9; // eax@7
  int v10; // [sp+4h] [bp-8h]@1
  int v11; // [sp+8h] [bp-4h]@1

  v10 = this;
  v11 = *(_DWORD *)sub_40B0F0(a2);
  v3 = sub_40B0E0(v11);
  *(_DWORD *)sub_40B0F0(a2) = *(_DWORD *)v3;
  v4 = sub_40B0E0(v11);
  if ( !*(_BYTE *)sub_40DAF0(*(_DWORD *)v4) )
  {
    v5 = sub_40B0E0(v11);
    *(_DWORD *)sub_40E370(*(_DWORD *)v5) = a2;
  }
  v6 = sub_40E370(a2);
  *(_DWORD *)sub_40E370(v11) = *(_DWORD *)v6;
  if ( a2 == *(_DWORD *)sub_410A70(v10) )
  {
    *(_DWORD *)sub_410A70(v10) = v11;
  }
  else
  {
    v7 = sub_40E370(a2);
    if ( a2 == *(_DWORD *)sub_40B0E0(*(_DWORD *)v7) )
    {
      v8 = sub_40E370(a2);
      *(_DWORD *)sub_40B0E0(*(_DWORD *)v8) = v11;
    }
    else
    {
      v9 = sub_40E370(a2);
      *(_DWORD *)sub_40B0F0(*(_DWORD *)v9) = v11;
    }
  }
  *(_DWORD *)sub_40B0E0(v11) = a2;
  result = sub_40E370(a2);
  *(_DWORD *)result = v11;
  return result;
}

//----- (00410A70) --------------------------------------------------------
int __fastcall sub_410A70(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return sub_40E370(*(_DWORD *)(a1 + 24));
}

//----- (00410A90) --------------------------------------------------------
int __thiscall sub_410A90(int this, int a2)
{
  int result; // eax@8
  int v3; // esi@1
  int v4; // eax@1
  int v5; // eax@2
  int v6; // esi@3
  int v7; // eax@5
  int v8; // eax@6
  int v9; // eax@7
  int v10; // [sp+4h] [bp-8h]@1
  int v11; // [sp+8h] [bp-4h]@1

  v10 = this;
  v11 = *(_DWORD *)sub_40B0E0(a2);
  v3 = sub_40B0F0(v11);
  *(_DWORD *)sub_40B0E0(a2) = *(_DWORD *)v3;
  v4 = sub_40B0F0(v11);
  if ( !*(_BYTE *)sub_40DAF0(*(_DWORD *)v4) )
  {
    v5 = sub_40B0F0(v11);
    *(_DWORD *)sub_40E370(*(_DWORD *)v5) = a2;
  }
  v6 = sub_40E370(a2);
  *(_DWORD *)sub_40E370(v11) = *(_DWORD *)v6;
  if ( a2 == *(_DWORD *)sub_410A70(v10) )
  {
    *(_DWORD *)sub_410A70(v10) = v11;
  }
  else
  {
    v7 = sub_40E370(a2);
    if ( a2 == *(_DWORD *)sub_40B0F0(*(_DWORD *)v7) )
    {
      v8 = sub_40E370(a2);
      *(_DWORD *)sub_40B0F0(*(_DWORD *)v8) = v11;
    }
    else
    {
      v9 = sub_40E370(a2);
      *(_DWORD *)sub_40B0E0(*(_DWORD *)v9) = v11;
    }
  }
  *(_DWORD *)sub_40B0F0(v11) = a2;
  result = sub_40E370(a2);
  *(_DWORD *)result = v11;
  return result;
}

//----- (00410BC0) --------------------------------------------------------
void *__fastcall sub_410BC0(int a1)
{
  void *v2; // eax@1
  int v3; // eax@1
  int v4; // eax@1
  int v5; // eax@1
  int v6; // [sp+0h] [bp-38h]@1
  int *v7; // [sp+28h] [bp-10h]@1
  int v8; // [sp+10h] [bp-28h]@1
  void *v9; // [sp+20h] [bp-18h]@1
  int v10; // [sp+24h] [bp-14h]@1
  signed int v11; // [sp+34h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp-1Ch]@1
  int v13; // [sp+18h] [bp-20h]@1
  int v14; // [sp+14h] [bp-24h]@1

  v7 = &v6;
  v8 = a1;
  v2 = sub_412130(1u);
  v9 = v2;
  v10 = 0;
  v11 = 0;
  v12 = 0;
  v3 = sub_40B0E0((int)v2);
  sub_411FE0((void *)v3, &v12);
  ++v10;
  v13 = 0;
  v4 = sub_40E370((int)v9);
  sub_411FE0((void *)v4, &v13);
  ++v10;
  v14 = 0;
  v5 = sub_40B0F0((int)v9);
  sub_411FE0((void *)v5, &v14);
  v11 = -1;
  *(_BYTE *)sub_4100A0((int)v9) = 1;
  *(_BYTE *)sub_40DAF0((int)v9) = 0;
  return v9;
}

//----- (00410D30) --------------------------------------------------------
void *__thiscall sub_410D30(int this, int a2, int a3, int a4, int a5, char a6)
{
  void *v7; // eax@1
  void *v8; // eax@1
  int v9; // [sp+0h] [bp-38h]@1
  int *v10; // [sp+28h] [bp-10h]@1
  int v11; // [sp+18h] [bp-20h]@1
  void *v12; // [sp+24h] [bp-14h]@1
  int v13; // [sp+34h] [bp-4h]@1
  int v14; // [sp+1Ch] [bp-1Ch]@1

  v10 = &v9;
  v11 = this;
  v7 = sub_412130(1u);
  v12 = v7;
  v13 = 0;
  v8 = operator new(0x4C4u, v7);
  v14 = (int)v8;
  LOBYTE(v13) = 1;
  if ( v8 )
    sub_412410(v14, a2, a3, a4, a5, a6);
  return v12;
}

//----- (00410E20) --------------------------------------------------------
int __thiscall sub_410E20(int this, int a2, int a3, int a4)
{
  int v5; // eax@1
  int v6; // eax@3
  int v7; // eax@5
  int v8; // eax@7
  int v9; // eax@27
  int v10; // esi@27
  int v11; // esi@31
  int v12; // eax@31
  int v13; // eax@34
  int v14; // eax@35
  int v15; // eax@36
  int v16; // esi@37
  int v17; // ST08_4@37
  int v18; // eax@37
  int v19; // eax@42
  int v20; // eax@46
  int v21; // eax@47
  int v22; // eax@49
  int v23; // eax@50
  int v24; // esi@51
  int v25; // eax@51
  int v26; // eax@57
  int v27; // eax@58
  int v28; // eax@60
  int v29; // eax@61
  int v30; // esi@62
  int v31; // eax@62
  int v32; // [sp+10h] [bp-64h]@1
  char v33; // [sp+14h] [bp-60h]@2
  signed int v34; // [sp+70h] [bp-4h]@2
  char v35; // [sp+30h] [bp-44h]@2
  void *v36; // [sp+64h] [bp-10h]@3
  int v37; // [sp+5Ch] [bp-18h]@3
  int v38; // [sp+60h] [bp-14h]@4
  int v39; // [sp+58h] [bp-1Ch]@9
  int v40; // [sp+Ch] [bp-68h]@18
  int v41; // [sp+8h] [bp-6Ch]@23

  v32 = this;
  v5 = sub_415300();
  if ( *(_BYTE *)sub_40B0D0(v5) )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v33);
    v34 = 0;
    sub_406350((int)&v35, (int)&v33);
    CxxThrowException(&v35, &unk_433DFC);
    v34 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v33);
  }
  v36 = (void *)sub_415300();
  sub_40B9C0((int)&a3);
  v37 = (int)v36;
  v6 = sub_40B0E0((int)v36);
  if ( *(_BYTE *)sub_40B0D0(*(_DWORD *)v6) )
  {
    v38 = *(_DWORD *)sub_40B0F0(v37);
  }
  else
  {
    v7 = sub_40B0F0(v37);
    if ( *(_BYTE *)sub_40B0D0(*(_DWORD *)v7) )
    {
      v38 = *(_DWORD *)sub_40B0E0(v37);
    }
    else
    {
      v8 = sub_415300();
      v37 = v8;
      v38 = *(_DWORD *)sub_40B0F0(v8);
    }
  }
  if ( v37 == (_DWORD)v36 )
  {
    v39 = *(_DWORD *)sub_40E370((int)v36);
    if ( !*(_BYTE *)sub_40B0D0(v38) )
      *(_DWORD *)sub_40E370(v38) = v39;
    if ( *(_DWORD *)sub_410A70(v32) == (_DWORD)v36 )
    {
      *(_DWORD *)sub_410A70(v32) = v38;
    }
    else
    {
      if ( *(_DWORD *)sub_40B0E0(v39) == (_DWORD)v36 )
        *(_DWORD *)sub_40B0E0(v39) = v38;
      else
        *(_DWORD *)sub_40B0F0(v39) = v38;
    }
    if ( *(_DWORD *)sub_40FC70(v32) == (_DWORD)v36 )
    {
      if ( *(_BYTE *)sub_40B0D0(v38) )
        v40 = v39;
      else
        v40 = sub_411600(v38);
      *(_DWORD *)sub_40FC70(v32) = v40;
    }
    if ( *(_DWORD *)sub_40DA80(v32) == (_DWORD)v36 )
    {
      if ( *(_BYTE *)sub_40B0D0(v38) )
        v41 = v39;
      else
        v41 = sub_412170(v38);
      *(_DWORD *)sub_40DA80(v32) = v41;
    }
  }
  else
  {
    v9 = sub_40B0E0((int)v36);
    *(_DWORD *)sub_40E370(*(_DWORD *)v9) = v37;
    v10 = sub_40B0E0((int)v36);
    *(_DWORD *)sub_40B0E0(v37) = *(_DWORD *)v10;
    if ( v37 == *(_DWORD *)sub_40B0F0((int)v36) )
    {
      v39 = v37;
    }
    else
    {
      v39 = *(_DWORD *)sub_40E370(v37);
      if ( !*(_BYTE *)sub_40B0D0(v38) )
        *(_DWORD *)sub_40E370(v38) = v39;
      *(_DWORD *)sub_40B0E0(v39) = v38;
      v11 = sub_40B0F0((int)v36);
      *(_DWORD *)sub_40B0F0(v37) = *(_DWORD *)v11;
      v12 = sub_40B0F0((int)v36);
      *(_DWORD *)sub_40E370(*(_DWORD *)v12) = v37;
    }
    if ( *(_DWORD *)sub_410A70(v32) == (_DWORD)v36 )
    {
      *(_DWORD *)sub_410A70(v32) = v37;
    }
    else
    {
      v13 = sub_40E370((int)v36);
      if ( *(_DWORD *)sub_40B0E0(*(_DWORD *)v13) == (_DWORD)v36 )
      {
        v14 = sub_40E370((int)v36);
        *(_DWORD *)sub_40B0E0(*(_DWORD *)v14) = v37;
      }
      else
      {
        v15 = sub_40E370((int)v36);
        *(_DWORD *)sub_40B0F0(*(_DWORD *)v15) = v37;
      }
    }
    v16 = sub_40E370((int)v36);
    *(_DWORD *)sub_40E370(v37) = *(_DWORD *)v16;
    v17 = sub_40E360((int)v36);
    v18 = sub_40E360(v37);
    sub_413530(v18, v17);
  }
  if ( *(_BYTE *)sub_40E360((int)v36) == 1 )
  {
    while ( v38 != *(_DWORD *)sub_410A70(v32) && *(_BYTE *)sub_40E360(v38) == 1 )
    {
      if ( v38 == *(_DWORD *)sub_40B0E0(v39) )
      {
        v19 = *(_DWORD *)sub_40B0F0(v39);
        v37 = v19;
        if ( !*(_BYTE *)sub_40E360(v19) )
        {
          *(_BYTE *)sub_40E360(v37) = 1;
          *(_BYTE *)sub_40E360(v39) = 0;
          sub_40E4C0(v32, v39);
          v37 = *(_DWORD *)sub_40B0F0(v39);
        }
        if ( *(_BYTE *)sub_40B0D0(v37) )
        {
          v38 = v39;
        }
        else
        {
          v20 = sub_40B0E0(v37);
          if ( *(_BYTE *)sub_40E360(*(_DWORD *)v20) != 1
            || (v21 = sub_40B0F0(v37), *(_BYTE *)sub_40E360(*(_DWORD *)v21) != 1) )
          {
            v22 = sub_40B0F0(v37);
            if ( *(_BYTE *)sub_40E360(*(_DWORD *)v22) == 1 )
            {
              v23 = sub_40B0E0(v37);
              *(_BYTE *)sub_40E360(*(_DWORD *)v23) = 1;
              *(_BYTE *)sub_40E360(v37) = 0;
              sub_40E5F0(v32, v37);
              v37 = *(_DWORD *)sub_40B0F0(v39);
            }
            v24 = sub_40E360(v39);
            *(_BYTE *)sub_40E360(v37) = *(_BYTE *)v24;
            *(_BYTE *)sub_40E360(v39) = 1;
            v25 = sub_40B0F0(v37);
            *(_BYTE *)sub_40E360(*(_DWORD *)v25) = 1;
            sub_40E4C0(v32, v39);
            break;
          }
          *(_BYTE *)sub_40E360(v37) = 0;
          v38 = v39;
        }
      }
      else
      {
        v37 = *(_DWORD *)sub_40B0E0(v39);
        if ( !*(_BYTE *)sub_40E360(v37) )
        {
          *(_BYTE *)sub_40E360(v37) = 1;
          *(_BYTE *)sub_40E360(v39) = 0;
          sub_40E5F0(v32, v39);
          v37 = *(_DWORD *)sub_40B0E0(v39);
        }
        if ( *(_BYTE *)sub_40B0D0(v37) )
        {
          v38 = v39;
        }
        else
        {
          v26 = sub_40B0F0(v37);
          if ( *(_BYTE *)sub_40E360(*(_DWORD *)v26) != 1
            || (v27 = sub_40B0E0(v37), *(_BYTE *)sub_40E360(*(_DWORD *)v27) != 1) )
          {
            v28 = sub_40B0E0(v37);
            if ( *(_BYTE *)sub_40E360(*(_DWORD *)v28) == 1 )
            {
              v29 = sub_40B0F0(v37);
              *(_BYTE *)sub_40E360(*(_DWORD *)v29) = 1;
              *(_BYTE *)sub_40E360(v37) = 0;
              sub_40E4C0(v32, v37);
              v37 = *(_DWORD *)sub_40B0E0(v39);
            }
            v30 = sub_40E360(v39);
            *(_BYTE *)sub_40E360(v37) = *(_BYTE *)v30;
            *(_BYTE *)sub_40E360(v39) = 1;
            v31 = sub_40B0E0(v37);
            *(_BYTE *)sub_40E360(*(_DWORD *)v31) = 1;
            sub_40E5F0(v32, v39);
            break;
          }
          *(_BYTE *)sub_40E360(v37) = 0;
          v38 = v39;
        }
      }
      v39 = *(_DWORD *)sub_40E370(v38);
    }
    *(_BYTE *)sub_40E360(v38) = 1;
  }
  sub_40E800((int)v36);
  unknown_libname_2(v36, 1);
  if ( *(_DWORD *)(v32 + 28) )
    --*(_DWORD *)(v32 + 28);
  sub_4100B0(v32, a2, a3, a4);
  return a2;
}

//----- (00411600) --------------------------------------------------------
int __cdecl sub_411600(int a1)
{
  int v2; // eax@1

  while ( 1 )
  {
    v2 = sub_40B0E0(a1);
    if ( *(_BYTE *)sub_40B0D0(*(_DWORD *)v2) )
      break;
    a1 = *(_DWORD *)sub_40B0E0(a1);
  }
  return a1;
}

//----- (00411640) --------------------------------------------------------
void *__fastcall sub_411640(int a1)
{
  void *v2; // eax@1
  int v3; // eax@1
  int v4; // eax@1
  int v5; // eax@1
  int v6; // [sp+0h] [bp-38h]@1
  int *v7; // [sp+28h] [bp-10h]@1
  int v8; // [sp+10h] [bp-28h]@1
  void *v9; // [sp+20h] [bp-18h]@1
  int v10; // [sp+24h] [bp-14h]@1
  signed int v11; // [sp+34h] [bp-4h]@1
  int v12; // [sp+1Ch] [bp-1Ch]@1
  int v13; // [sp+18h] [bp-20h]@1
  int v14; // [sp+14h] [bp-24h]@1

  v7 = &v6;
  v8 = a1;
  v2 = sub_4117B0(1u);
  v9 = v2;
  v10 = 0;
  v11 = 0;
  v12 = 0;
  v3 = sub_40B0E0((int)v2);
  sub_411FE0((void *)v3, &v12);
  ++v10;
  v13 = 0;
  v4 = sub_40E370((int)v9);
  sub_411FE0((void *)v4, &v13);
  ++v10;
  v14 = 0;
  v5 = sub_40B0F0((int)v9);
  sub_411FE0((void *)v5, &v14);
  v11 = -1;
  *(_BYTE *)sub_40E360((int)v9) = 1;
  *(_BYTE *)sub_40B0D0((int)v9) = 0;
  return v9;
}

//----- (004117B0) --------------------------------------------------------
void *__stdcall sub_4117B0(unsigned int a1)
{
  return sub_413560(a1);
}

//----- (004117D0) --------------------------------------------------------
signed int __cdecl sub_4117D0()
{
  return 89478485;
}

//----- (00411800) --------------------------------------------------------
int __thiscall sub_411800(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // [sp+0h] [bp-Ch]@1
  int v6; // [sp+4h] [bp-8h]@1
  int v7; // [sp+8h] [bp-4h]@1

  v5 = this;
  v4 = *(_DWORD *)(this + 4);
  v6 = *(_DWORD *)this;
  v7 = v4;
  sub_40E8D0(this);
  *(_DWORD *)a2 = v6;
  *(_DWORD *)(a2 + 4) = v7;
  return a2;
}

//----- (00411840) --------------------------------------------------------
int __fastcall sub_411840(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  int v3; // edx@3
  int v4; // ecx@3
  int result; // eax@4
  int v6; // eax@5
  int v7; // eax@6
  int v8; // [sp+0h] [bp-8h]@1
  int v9; // [sp+4h] [bp-4h]@7

  v8 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  v4 = *(_BYTE *)sub_40D950(*(_DWORD *)(v8 + 4));
  if ( v4 )
  {
    result = invalid_parameter_noinfo(v4, v3);
  }
  else
  {
    v6 = sub_40B0F0(*(_DWORD *)(v8 + 4));
    if ( *(_BYTE *)sub_40D950(*(_DWORD *)v6) )
    {
      while ( 1 )
      {
        v9 = *(_DWORD *)sub_40E370(*(_DWORD *)(v8 + 4));
        result = *(_BYTE *)sub_40D950(v9);
        if ( result )
          break;
        result = sub_40B0F0(v9);
        if ( *(_DWORD *)(v8 + 4) != *(_DWORD *)result )
          break;
        *(_DWORD *)(v8 + 4) = v9;
      }
      *(_DWORD *)(v8 + 4) = v9;
    }
    else
    {
      v7 = sub_40B0F0(*(_DWORD *)(v8 + 4));
      result = sub_411F20(*(_DWORD *)v7);
      *(_DWORD *)(v8 + 4) = result;
    }
  }
  return result;
}

//----- (00411920) --------------------------------------------------------
int __fastcall sub_411920(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_40E930(a1);
  return v2;
}

//----- (00411940) --------------------------------------------------------
int __thiscall sub_411940(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // [sp+0h] [bp-Ch]@1
  int v6; // [sp+4h] [bp-8h]@1
  int v7; // [sp+8h] [bp-4h]@1

  v5 = this;
  v4 = *(_DWORD *)(this + 4);
  v6 = *(_DWORD *)this;
  v7 = v4;
  sub_40E910(this);
  *(_DWORD *)a2 = v6;
  *(_DWORD *)(a2 + 4) = v7;
  return a2;
}

//----- (00411980) --------------------------------------------------------
int __fastcall sub_411980(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  int result; // eax@4
  int v4; // edx@4
  int v5; // ecx@4
  int v6; // edx@12
  int v7; // ecx@12
  int v8; // eax@7
  int v9; // eax@8
  int v10; // [sp+0h] [bp-8h]@1
  int v11; // [sp+4h] [bp-4h]@9

  v10 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)(v10 + 4)) )
  {
    *(_DWORD *)(v10 + 4) = *(_DWORD *)sub_40B0F0(*(_DWORD *)(v10 + 4));
    result = sub_40DAF0(*(_DWORD *)(v10 + 4));
    v4 = *(_BYTE *)result;
    if ( v4 )
      result = invalid_parameter_noinfo(v5, v4);
  }
  else
  {
    v8 = sub_40B0E0(*(_DWORD *)(v10 + 4));
    if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v8) )
    {
      while ( 1 )
      {
        v11 = *(_DWORD *)sub_40E370(*(_DWORD *)(v10 + 4));
        if ( *(_BYTE *)sub_40DAF0(v11) )
          break;
        if ( *(_DWORD *)(v10 + 4) != *(_DWORD *)sub_40B0E0(v11) )
          break;
        *(_DWORD *)(v10 + 4) = v11;
      }
      result = *(_BYTE *)sub_40DAF0(*(_DWORD *)(v10 + 4));
      if ( result )
        result = invalid_parameter_noinfo(v7, v6);
      else
        *(_DWORD *)(v10 + 4) = v11;
    }
    else
    {
      v9 = sub_40B0E0(*(_DWORD *)(v10 + 4));
      result = sub_412080(*(_DWORD *)v9);
      *(_DWORD *)(v10 + 4) = result;
    }
  }
  return result;
}

//----- (00411AB0) --------------------------------------------------------
int __fastcall sub_411AB0(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  int v3; // edx@3
  int v4; // ecx@3
  int result; // eax@4
  int v6; // eax@5
  int v7; // eax@6
  int v8; // [sp+0h] [bp-8h]@1
  int v9; // [sp+4h] [bp-4h]@7

  v8 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  v4 = *(_BYTE *)sub_40DAF0(*(_DWORD *)(v8 + 4));
  if ( v4 )
  {
    result = invalid_parameter_noinfo(v4, v3);
  }
  else
  {
    v6 = sub_40B0F0(*(_DWORD *)(v8 + 4));
    if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v6) )
    {
      while ( 1 )
      {
        v9 = *(_DWORD *)sub_40E370(*(_DWORD *)(v8 + 4));
        result = *(_BYTE *)sub_40DAF0(v9);
        if ( result )
          break;
        result = sub_40B0F0(v9);
        if ( *(_DWORD *)(v8 + 4) != *(_DWORD *)result )
          break;
        *(_DWORD *)(v8 + 4) = v9;
      }
      *(_DWORD *)(v8 + 4) = v9;
    }
    else
    {
      v7 = sub_40B0F0(*(_DWORD *)(v8 + 4));
      result = sub_4120C0(*(_DWORD *)v7);
      *(_DWORD *)(v8 + 4) = result;
    }
  }
  return result;
}

//----- (00411B90) --------------------------------------------------------
char __thiscall sub_411B90(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v6 + 4) == *(_DWORD *)(a2 + 4);
}

//----- (00411BE0) --------------------------------------------------------
int __thiscall sub_411BE0(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // [sp+0h] [bp-Ch]@1
  int v6; // [sp+4h] [bp-8h]@1
  int v7; // [sp+8h] [bp-4h]@1

  v5 = this;
  v4 = *(_DWORD *)(this + 4);
  v6 = *(_DWORD *)this;
  v7 = v4;
  sub_40B9C0(this);
  *(_DWORD *)a2 = v6;
  *(_DWORD *)(a2 + 4) = v7;
  return a2;
}

//----- (00411C20) --------------------------------------------------------
int __fastcall sub_411C20(int a1)
{
  int v1; // edx@1
  int v2; // ecx@1
  int result; // eax@4
  int v4; // edx@4
  int v5; // ecx@4
  int v6; // edx@12
  int v7; // ecx@12
  int v8; // eax@7
  int v9; // eax@8
  int v10; // [sp+0h] [bp-8h]@1
  int v11; // [sp+4h] [bp-4h]@9

  v10 = a1;
  if ( !(unsigned __int8)sub_4010D0(a1) )
    invalid_parameter_noinfo(v2, v1);
  if ( *(_BYTE *)sub_40B0D0(*(_DWORD *)(v10 + 4)) )
  {
    *(_DWORD *)(v10 + 4) = *(_DWORD *)sub_40B0F0(*(_DWORD *)(v10 + 4));
    result = sub_40B0D0(*(_DWORD *)(v10 + 4));
    v4 = *(_BYTE *)result;
    if ( v4 )
      result = invalid_parameter_noinfo(v5, v4);
  }
  else
  {
    v8 = sub_40B0E0(*(_DWORD *)(v10 + 4));
    if ( *(_BYTE *)sub_40B0D0(*(_DWORD *)v8) )
    {
      while ( 1 )
      {
        v11 = *(_DWORD *)sub_40E370(*(_DWORD *)(v10 + 4));
        if ( *(_BYTE *)sub_40B0D0(v11) )
          break;
        if ( *(_DWORD *)(v10 + 4) != *(_DWORD *)sub_40B0E0(v11) )
          break;
        *(_DWORD *)(v10 + 4) = v11;
      }
      result = *(_BYTE *)sub_40B0D0(*(_DWORD *)(v10 + 4));
      if ( result )
        result = invalid_parameter_noinfo(v7, v6);
      else
        *(_DWORD *)(v10 + 4) = v11;
    }
    else
    {
      v9 = sub_40B0E0(*(_DWORD *)(v10 + 4));
      result = sub_412170(*(_DWORD *)v9);
      *(_DWORD *)(v10 + 4) = result;
    }
  }
  return result;
}

//----- (00411D50) --------------------------------------------------------
int __thiscall sub_411D50(int this, int a2, int a3, unsigned int a4)
{
  sub_411E20(a2, a4, this);
  return a2;
}

//----- (00411D70) --------------------------------------------------------
int __thiscall sub_411D70(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_4121B0(this, a2);
  return v3;
}

//----- (00411D90) --------------------------------------------------------
int __thiscall sub_411D90(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_412230(this, a2);
  return v3;
}

//----- (00411DB0) --------------------------------------------------------
int __thiscall sub_411DB0(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_4122B0(this, a2);
  return v3;
}

//----- (00411DD0) --------------------------------------------------------
int __thiscall sub_411DD0(int this, int a2, int a3, int a4, int a5, char a6)
{
  int v7; // [sp+0h] [bp-4h]@1

  v7 = this;
  *(_DWORD *)this = a2;
  *(_DWORD *)(v7 + 4) = a3;
  *(_DWORD *)(v7 + 8) = a4;
  *(_WORD *)(v7 + 12) = *(_WORD *)a5;
  *(_BYTE *)(v7 + 14) = a6;
  *(_BYTE *)(v7 + 15) = 0;
  return v7;
}

//----- (00411E20) --------------------------------------------------------
int __thiscall sub_411E20(int this, unsigned int a2, int a3)
{
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  sub_412330(this, a2, a3);
  return v4;
}

//----- (00411E40) --------------------------------------------------------
int __thiscall sub_411E40(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_412390(this, a2);
  return v3;
}

//----- (00411E60) --------------------------------------------------------
int __thiscall sub_411E60(int this, void *a2)
{
  int result; // eax@2
  int v3; // eax@3
  int v4; // [sp+0h] [bp-8h]@1
  void *v5; // [sp+4h] [bp-4h]@1

  v4 = this;
  v5 = a2;
  while ( 1 )
  {
    result = *(_BYTE *)sub_40D950((int)v5);
    if ( result )
      break;
    v3 = sub_40B0F0((int)v5);
    sub_411E60(*(void **)v3);
    v5 = *(void **)sub_40B0E0((int)v5);
    sub_411FC0(a2);
    unknown_libname_2(a2, 1);
    a2 = v5;
  }
  return result;
}

//----- (00411EE0) --------------------------------------------------------
int __cdecl sub_411EE0(int a1)
{
  int v2; // eax@1

  while ( 1 )
  {
    v2 = sub_40B0F0(a1);
    if ( *(_BYTE *)sub_40D950(*(_DWORD *)v2) )
      break;
    a1 = *(_DWORD *)sub_40B0F0(a1);
  }
  return a1;
}

//----- (00411F20) --------------------------------------------------------
int __cdecl sub_411F20(int a1)
{
  int v2; // eax@1

  while ( 1 )
  {
    v2 = sub_40B0E0(a1);
    if ( *(_BYTE *)sub_40D950(*(_DWORD *)v2) )
      break;
    a1 = *(_DWORD *)sub_40B0E0(a1);
  }
  return a1;
}

//----- (00411F60) --------------------------------------------------------
int __thiscall sub_411F60(int this, int *a2, char a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+0h] [bp-8h]@1
  char *v6; // [sp+4h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  std___Init_locks__operator_(&a3);
  sub_4124F0(v5, *(_BYTE *)a2, v4);
  std___Init_locks__operator_(&a3);
  return v5;
}

//----- (00411FA0) --------------------------------------------------------
void *__stdcall sub_411FA0(unsigned int a1)
{
  return sub_4135B0(a1);
}

//----- (00411FC0) --------------------------------------------------------
void *__stdcall sub_411FC0(void *a1)
{
  return sub_413610(a1);
}

//----- (00411FE0) --------------------------------------------------------
void *__stdcall sub_411FE0(void *a1, void *a2)
{
  return sub_413620(a1, a2);
}

//----- (00412000) --------------------------------------------------------
int __thiscall sub_412000(int this, void *a2)
{
  int result; // eax@2
  int v3; // eax@3
  int v4; // [sp+0h] [bp-8h]@1
  void *v5; // [sp+4h] [bp-4h]@1

  v4 = this;
  v5 = a2;
  while ( 1 )
  {
    result = *(_BYTE *)sub_40DAF0((int)v5);
    if ( result )
      break;
    v3 = sub_40B0F0((int)v5);
    sub_412000(*(void **)v3);
    v5 = *(void **)sub_40B0E0((int)v5);
    sub_412150(a2);
    unknown_libname_2(a2, 1);
    a2 = v5;
  }
  return result;
}

//----- (00412080) --------------------------------------------------------
int __cdecl sub_412080(int a1)
{
  int v2; // eax@1

  while ( 1 )
  {
    v2 = sub_40B0F0(a1);
    if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v2) )
      break;
    a1 = *(_DWORD *)sub_40B0F0(a1);
  }
  return a1;
}

//----- (004120C0) --------------------------------------------------------
int __cdecl sub_4120C0(int a1)
{
  int v2; // eax@1

  while ( 1 )
  {
    v2 = sub_40B0E0(a1);
    if ( *(_BYTE *)sub_40DAF0(*(_DWORD *)v2) )
      break;
    a1 = *(_DWORD *)sub_40B0E0(a1);
  }
  return a1;
}

//----- (00412100) --------------------------------------------------------
signed int __cdecl sub_412100()
{
  return 3567248;
}

//----- (00412130) --------------------------------------------------------
void *__stdcall sub_412130(unsigned int a1)
{
  return sub_413660(a1);
}

//----- (00412150) --------------------------------------------------------
void *__stdcall sub_412150(void *a1)
{
  return sub_4136C0(a1);
}

//----- (00412170) --------------------------------------------------------
int __cdecl sub_412170(int a1)
{
  int v2; // eax@1

  while ( 1 )
  {
    v2 = sub_40B0F0(a1);
    if ( *(_BYTE *)sub_40B0D0(*(_DWORD *)v2) )
      break;
    a1 = *(_DWORD *)sub_40B0F0(a1);
  }
  return a1;
}

//----- (004121B0) --------------------------------------------------------
int __thiscall sub_4121B0(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(*(_DWORD *)(v7 + 4) + 32 * a2) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(*(_DWORD *)(v7 + 4) + 32 * a2) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += 32 * a2;
  return v7;
}

//----- (00412230) --------------------------------------------------------
int __thiscall sub_412230(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(*(_DWORD *)(v7 + 4) + 4 * a2) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(*(_DWORD *)(v7 + 4) + 4 * a2) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += 4 * a2;
  return v7;
}

//----- (004122B0) --------------------------------------------------------
int __thiscall sub_4122B0(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(*(_DWORD *)(v7 + 4) + 2 * a2) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(*(_DWORD *)(v7 + 4) + 2 * a2) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += 2 * a2;
  return v7;
}

//----- (00412330) --------------------------------------------------------
int __thiscall sub_412330(int this, unsigned int a2, int a3)
{
  int v3; // edx@1
  unsigned int v4; // ecx@1
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  sub_40F310(this);
  if ( !a3 || (v4 = *(_DWORD *)(a3 + 12), v4 > a2) || (v3 = a3, a2 > *(_DWORD *)(a3 + 16)) )
    invalid_parameter_noinfo(v4, v3);
  sub_401060(v6, a3);
  *(_DWORD *)(v6 + 4) = a2;
  return v6;
}

//----- (00412390) --------------------------------------------------------
int __thiscall sub_412390(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(*(_DWORD *)(v7 + 4) + 28 * a2) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(*(_DWORD *)(v7 + 4) + 28 * a2) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += 28 * a2;
  return v7;
}

//----- (00412410) --------------------------------------------------------
int __thiscall sub_412410(int this, int a2, int a3, int a4, int a5, char a6)
{
  int v7; // [sp+0h] [bp-4h]@1

  v7 = this;
  *(_DWORD *)this = a2;
  *(_DWORD *)(v7 + 4) = a3;
  *(_DWORD *)(v7 + 8) = a4;
  sub_412460(v7 + 12, a5);
  *(_BYTE *)(v7 + 1216) = a6;
  *(_BYTE *)(v7 + 1217) = 0;
  return v7;
}

//----- (00412460) --------------------------------------------------------
int __thiscall sub_412460(int this, int a2)
{
  int v3; // [sp+4h] [bp-10h]@1

  v3 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  sub_40BD60(v3 + 28, a2 + 28);
  return v3;
}

//----- (004124F0) --------------------------------------------------------
int __thiscall sub_4124F0(int this, int a2, char a3)
{
  char v4; // ST04_1@1
  int v5; // [sp+0h] [bp-8h]@1
  char *v6; // [sp+4h] [bp-4h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  std___Init_locks__operator_(&a3);
  sub_403460(v5, v4);
  return v5;
}

//----- (00412520) --------------------------------------------------------
int __thiscall sub_412520(int this, char a2, char a3)
{
  char v4; // ST08_1@1
  int v5; // [sp+4h] [bp-18h]@1
  char *v6; // [sp+Ch] [bp-10h]@1
  int v7; // [sp+18h] [bp-4h]@1
  char v8; // [sp+Bh] [bp-11h]@1
  unsigned __int8 v9; // [sp+Ah] [bp-12h]@1

  v5 = this;
  v4 = this;
  v6 = &v4;
  _LocaleUpdate__GetLocaleT();
  sub_4027B0(v5, v4);
  v7 = 0;
  unknown_libname_18(&v8);
  sub_413770(v5, a2, a3, v9);
  return v5;
}

//----- (004125B0) --------------------------------------------------------
#error "412851: call analysis failed (funcsize=217)"

//----- (00412890) --------------------------------------------------------
int __cdecl sub_412890(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_413820(v7, v6, v5);
}

//----- (00412930) --------------------------------------------------------
int __cdecl sub_412930(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_4138E0(v7, v6, v5);
}

//----- (004129A0) --------------------------------------------------------
int __cdecl sub_4129A0(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_413940(v7, v6, v5);
}

//----- (00412A10) --------------------------------------------------------
int __cdecl sub_412A10(int a1, int a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_4139A0(a1, a2);
}

//----- (00412A50) --------------------------------------------------------
int __cdecl sub_412A50(void *a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_4139D0(a1, a2, a3);
}

//----- (00412AA0) --------------------------------------------------------
int __cdecl sub_412AA0(int a1, int a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_413A90(a1, a2);
}

//----- (00412AE0) --------------------------------------------------------
int __cdecl sub_412AE0(void *a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_413AC0(a1, a2, a3);
}

//----- (00412B30) --------------------------------------------------------
int __cdecl sub_412B30(int a1, int a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_413B80(a1, a2);
}

//----- (00412B70) --------------------------------------------------------
int __cdecl sub_412B70(void *a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_413BB0(a1, a2, a3);
}

//----- (00412BC0) --------------------------------------------------------
int __cdecl sub_412BC0(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_413C70(v7, v6, v5);
}

//----- (00412C30) --------------------------------------------------------
void *__cdecl sub_412C30(void *a1, int a2, void **a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_413CD0(a1, a2, a3);
}

//----- (00412C80) --------------------------------------------------------
char *__cdecl sub_412C80(char a1, char a2, void *Dst)
{
  char v4; // ST0C_1@1
  void *v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = Dst;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_413DA0((void *)v7, v6, v5);
}

//----- (00412CF0) --------------------------------------------------------
int __cdecl sub_412CF0(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_413DF0(a1, a2, a3);
}

//----- (00412D40) --------------------------------------------------------
void *__stdcall sub_412D40(char a1, int a2, char a3, int a4, void *a5)
{
  return sub_413E10(a1, a2, a3, a4, a5);
}

//----- (00412DA0) --------------------------------------------------------
int __cdecl sub_412DA0(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_413EC0(v6, v5, v4);
}

//----- (00412DD0) --------------------------------------------------------
int __cdecl sub_412DD0(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_413EF0(v7, v6, v5);
}

//----- (00412E70) --------------------------------------------------------
int __cdecl sub_412E70(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_413F90(v6, v5, v4);
}

//----- (00412EA0) --------------------------------------------------------
int __cdecl sub_412EA0(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_413FC0(v7, v6, v5);
}

//----- (00412F10) --------------------------------------------------------
void *__cdecl sub_412F10(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0x17C )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(380 * a1);
}

//----- (00412FA0) --------------------------------------------------------
int __cdecl sub_412FA0(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_414060(v6, v5, v4);
}

//----- (00412FD0) --------------------------------------------------------
int __cdecl sub_412FD0(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_414090(v7, v6, v5);
}

//----- (00413040) --------------------------------------------------------
void *__cdecl sub_413040(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0x20 )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(32 * a1);
}

//----- (00413090) --------------------------------------------------------
int __cdecl sub_413090(int a1, int a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_4140E0(a1, a2);
}

//----- (00413100) --------------------------------------------------------
int __cdecl sub_413100(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_414160(v6, v5, v4);
}

//----- (00413130) --------------------------------------------------------
int __cdecl sub_413130(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_414190(v7, v6, v5);
}

//----- (004131D0) --------------------------------------------------------
int __cdecl sub_4131D0(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_414230(v6, v5, v4);
}

//----- (00413200) --------------------------------------------------------
void *__cdecl sub_413200(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_414260((void *)v7, v6, v5);
}

//----- (004132D0) --------------------------------------------------------
int __cdecl sub_4132D0(void *a1, void *a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_4142B0(a1, a2);
}

//----- (00413310) --------------------------------------------------------
void *__cdecl sub_413310(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0x30 )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(48 * a1);
}

//----- (00413360) --------------------------------------------------------
int __cdecl sub_413360(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_4142E0(v7, v6, v5);
}

//----- (004133D0) --------------------------------------------------------
int __cdecl sub_4133D0(void *a1, void *a2)
{
  char v4; // al@1

  v4 = unknown_libname_17();
  return sub_414340(a1, a2);
}

//----- (00413440) --------------------------------------------------------
int __cdecl sub_413440(char a1, char a2)
{
  int v4; // ST04_4@1
  int v5; // eax@1

  v4 = sub_404570((int)&a2);
  v5 = sub_404570((int)&a1);
  return sub_4143C0(v5, v4);
}

//----- (00413470) --------------------------------------------------------
int __cdecl sub_413470(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_4143F0(v7, v6, v5);
}

//----- (004134E0) --------------------------------------------------------
int __cdecl sub_4134E0(void *a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_414450(a1, a2, a3);
}

//----- (00413530) --------------------------------------------------------
int __cdecl sub_413530(int a1, int a2)
{
  int result; // eax@1
  char v3; // [sp+1h] [bp-1h]@2

  result = a1;
  if ( a1 != a2 )
  {
    v3 = *(_BYTE *)a1;
    *(_BYTE *)a1 = *(_BYTE *)a2;
    result = a2;
    *(_BYTE *)a2 = v3;
  }
  return result;
}

//----- (00413560) --------------------------------------------------------
void *__cdecl sub_413560(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0x10 )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(16 * a1);
}

//----- (004135B0) --------------------------------------------------------
void *__cdecl sub_4135B0(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0xC8 )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(200 * a1);
}

//----- (00413610) --------------------------------------------------------
void *__cdecl sub_413610(void *a1)
{
  return sub_4136D0(a1, 0);
}

//----- (00413620) --------------------------------------------------------
void *__cdecl sub_413620(void *a1, void *a2)
{
  void *result; // eax@1
  void *v3; // [sp+4h] [bp-8h]@1

  result = operator new(4u, a1);
  v3 = result;
  if ( result )
  {
    result = a2;
    *(_DWORD *)v3 = *(_DWORD *)a2;
  }
  return result;
}

//----- (00413660) --------------------------------------------------------
void *__cdecl sub_413660(unsigned int a1)
{
  char v2; // [sp+0h] [bp-Ch]@4

  if ( a1 )
  {
    if ( 0xFFFFFFFF / a1 < 0x4C4 )
    {
      sub_4010F0((int)&v2, 0);
      CxxThrowException(&v2, &unk_433DC0);
    }
  }
  else
  {
    a1 = 0;
  }
  return operator new(1220 * a1);
}

//----- (004136C0) --------------------------------------------------------
void *__cdecl sub_4136C0(void *a1)
{
  return sub_413700(a1, 0);
}

//----- (004136D0) --------------------------------------------------------
void *__thiscall sub_4136D0(void *this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_413730();
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00413700) --------------------------------------------------------
void *__thiscall sub_413700(void *this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_413750();
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00413770) --------------------------------------------------------
void *__thiscall sub_413770(int this, char a2, char a3, int a4)
{
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-34h]@1
  int *v8; // [sp+24h] [bp-10h]@1
  int v9; // [sp+10h] [bp-24h]@1
  int v10; // [sp+30h] [bp-4h]@1
  char v11; // [sp+14h] [bp-20h]@1
  int v12; // [sp+1Ch] [bp-18h]@1
  int v13; // [sp+20h] [bp-14h]@1

  v8 = &v7;
  v9 = this;
  sub_402180(this, 0);
  v10 = 0;
  v5 = sub_402FA0(v9, (int)&v11);
  v6 = *(_DWORD *)(v5 + 4);
  v12 = *(_DWORD *)v5;
  v13 = v6;
  return sub_404CB0(v9, v12, v6, a2, a3);
}

//----- (00413820) --------------------------------------------------------
int __cdecl sub_413820(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 + 32 * ((a2 - a1) >> 5);
  v4 = sub_404570((int)&a3);
  sub_414680(a1, a2, v4);
  return v5;
}

//----- (00413880) --------------------------------------------------------
void *__cdecl sub_413880(char a1, char a2, void *a3)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_4146C0(v8, v7, v6);
}

//----- (004138E0) --------------------------------------------------------
int __cdecl sub_4138E0(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 + 380 * (a2 - a1) / 380;
  v4 = sub_404570((int)&a3);
  sub_414780(a1, a2, v4);
  return v5;
}

//----- (00413940) --------------------------------------------------------
int __cdecl sub_413940(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 + 32 * ((a2 - a1) >> 5);
  v4 = sub_404570((int)&a3);
  sub_4147C0(a1, a2, v4);
  return v5;
}

//----- (004139A0) --------------------------------------------------------
int __cdecl sub_4139A0(int a1, int a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_414560(a1);
    result = a1 + 32;
    a1 += 32;
  }
  return result;
}

//----- (004139D0) --------------------------------------------------------
int __cdecl sub_4139D0(void *a1, int a2, int a3)
{
  int result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = (int)a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_414540(a1, a3);
    --a2;
    a1 = (char *)a1 + 32;
  }
  return result;
}

//----- (00413A90) --------------------------------------------------------
int __cdecl sub_413A90(int a1, int a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_4145A0(a1);
    result = a1 + 380;
    a1 += 380;
  }
  return result;
}

//----- (00413AC0) --------------------------------------------------------
int __cdecl sub_413AC0(void *a1, int a2, int a3)
{
  int result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = (int)a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_414580(a1, a3);
    --a2;
    a1 = (char *)a1 + 380;
  }
  return result;
}

//----- (00413B80) --------------------------------------------------------
int __cdecl sub_413B80(int a1, int a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_4145E0(a1);
    result = a1 + 32;
    a1 += 32;
  }
  return result;
}

//----- (00413BB0) --------------------------------------------------------
int __cdecl sub_413BB0(void *a1, int a2, int a3)
{
  int result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = (int)a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_4145C0(a1, a3);
    --a2;
    a1 = (char *)a1 + 32;
  }
  return result;
}

//----- (00413C70) --------------------------------------------------------
int __cdecl sub_413C70(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 + 4 * ((a2 - a1) >> 2);
  v4 = sub_404570((int)&a3);
  sub_414800(a1, a2, v4);
  return v5;
}

//----- (00413CD0) --------------------------------------------------------
void *__cdecl sub_413CD0(void *a1, int a2, void **a3)
{
  void *result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_414600(a1, a3);
    --a2;
    a1 = (char *)a1 + 4;
  }
  return result;
}

//----- (00413DA0) --------------------------------------------------------
char *__cdecl sub_413DA0(void *Src, int a2, void *Dst)
{
  int v4; // [sp+0h] [bp-8h]@1
  char *v5; // [sp+4h] [bp-4h]@1

  v4 = (a2 - (_DWORD)Src) >> 1;
  v5 = (char *)Dst + 2 * ((a2 - (_DWORD)Src) >> 1);
  if ( (a2 - (_DWORD)Src) >> 1 > 0 )
    memmove_s(Dst, 2 * v4, Src, 2 * v4);
  return v5;
}

//----- (00413DF0) --------------------------------------------------------
int __cdecl sub_413DF0(int a1, int a2, int a3)
{
  return sub_414830(a1, a2, a3);
}

//----- (00413E10) --------------------------------------------------------
void *__cdecl sub_413E10(char a1, int a2, char a3, int a4, void *a5)
{
  char v7; // al@1
  void *v8; // ST08_4@1
  int v9; // ST04_4@1
  int v10; // eax@1
  char v11; // [sp+3h] [bp-1h]@1

  v11 = 0;
  v7 = unknown_libname_17();
  v8 = a5;
  v9 = sub_406200();
  v10 = sub_406200();
  return sub_4146C0(v10, v9, v8);
}

//----- (00413E70) --------------------------------------------------------
void *__cdecl sub_413E70(char a1, char a2, void *a3)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_414870(v7, v6, v5);
}

//----- (00413EC0) --------------------------------------------------------
int __cdecl sub_413EC0(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_414510(a1, a3);
    result = a1 + 32;
    a1 += 32;
  }
  return result;
}

//----- (00413EF0) --------------------------------------------------------
int __cdecl sub_413EF0(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_414890(a1, a2, a3);
}

//----- (00413F40) --------------------------------------------------------
void *__cdecl sub_413F40(char a1, char a2, void *a3)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_4148F0(v7, v6, v5);
}

//----- (00413F90) --------------------------------------------------------
int __cdecl sub_413F90(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_407C90(a1, a3);
    result = a1 + 380;
    a1 += 380;
  }
  return result;
}

//----- (00413FC0) --------------------------------------------------------
int __cdecl sub_413FC0(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_414910(a1, a2, a3);
}

//----- (00414010) --------------------------------------------------------
void *__cdecl sub_414010(char a1, char a2, void *a3)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_414970(v7, v6, v5);
}

//----- (00414060) --------------------------------------------------------
int __cdecl sub_414060(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_407FC0(a1, a3);
    result = a1 + 32;
    a1 += 32;
  }
  return result;
}

//----- (00414090) --------------------------------------------------------
int __cdecl sub_414090(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_414990(a1, a2, a3);
}

//----- (004140E0) --------------------------------------------------------
int __cdecl sub_4140E0(int a1, int a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_40E800(a1);
    result = a1 + 4;
    a1 += 4;
  }
  return result;
}

//----- (00414110) --------------------------------------------------------
void *__cdecl sub_414110(char a1, char a2, void *a3)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_4149F0(v7, v6, v5);
}

//----- (00414160) --------------------------------------------------------
int __cdecl sub_414160(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    *(_DWORD *)a1 = *(_DWORD *)a3;
    result = a1 + 4;
    a1 += 4;
  }
  return result;
}

//----- (00414190) --------------------------------------------------------
int __cdecl sub_414190(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_414A10(a1, a2, a3);
}

//----- (004141E0) --------------------------------------------------------
char *__cdecl sub_4141E0(char a1, char a2, void *Dst)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = Dst;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_414A70(v7, v6, v5);
}

//----- (00414230) --------------------------------------------------------
int __cdecl sub_414230(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    *(_WORD *)a1 = *(_WORD *)a3;
    result = a1 + 2;
    a1 += 2;
  }
  return result;
}

//----- (00414260) --------------------------------------------------------
void *__cdecl sub_414260(void *Src, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_414A90(Src, a2, a3);
}

//----- (004142B0) --------------------------------------------------------
int __cdecl sub_4142B0(void *a1, void *a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_414660(a1);
    result = (int)((char *)a1 + 48);
    a1 = (char *)a1 + 48;
  }
  return result;
}

//----- (004142E0) --------------------------------------------------------
int __cdecl sub_4142E0(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 + 28 * (a2 - a1) / 28;
  v4 = sub_404570((int)&a3);
  sub_414AF0(a1, a2, v4);
  return v5;
}

//----- (00414340) --------------------------------------------------------
int __cdecl sub_414340(void *a1, void *a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_414640(a1);
    result = (int)((char *)a1 + 28);
    a1 = (char *)a1 + 28;
  }
  return result;
}

//----- (00414370) --------------------------------------------------------
int __cdecl sub_414370(char a1, char a2, int a3)
{
  char v5; // al@1
  int v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_414B30(v8, v7, v6);
}

//----- (004143C0) --------------------------------------------------------
int __cdecl sub_4143C0(int a1, int a2)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a1);
    result = a1 + 28;
    a1 += 28;
  }
  return result;
}

//----- (004143F0) --------------------------------------------------------
int __cdecl sub_4143F0(int a1, int a2, int a3)
{
  int v6; // eax@1
  int v7; // [sp+4h] [bp-4h]@1

  v7 = a3 - 28 * (a2 - a1) / 28;
  v6 = sub_404570((int)&a3);
  sub_414C30(a1, a2, v6);
  return v7;
}

//----- (00414450) --------------------------------------------------------
int __cdecl sub_414450(void *a1, int a2, int a3)
{
  int result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = (int)a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_414620(a1, a3);
    --a2;
    a1 = (char *)a1 + 28;
  }
  return result;
}

//----- (00414510) --------------------------------------------------------
int __thiscall sub_414510(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(this);
  *(_BYTE *)(v3 + 28) = *(_BYTE *)(a2 + 28);
  return v3;
}

//----- (00414540) --------------------------------------------------------
int __stdcall sub_414540(void *a1, int a2)
{
  return sub_414C70(a1, a2);
}

//----- (00414560) --------------------------------------------------------
void *__stdcall sub_414560(int a1)
{
  return sub_414CF0(a1);
}

//----- (00414580) --------------------------------------------------------
int __stdcall sub_414580(void *a1, int a2)
{
  return sub_414D00(a1, a2);
}

//----- (004145A0) --------------------------------------------------------
void *__stdcall sub_4145A0(int a1)
{
  return sub_414D80(a1);
}

//----- (004145C0) --------------------------------------------------------
int __stdcall sub_4145C0(void *a1, int a2)
{
  return sub_414D90(a1, a2);
}

//----- (004145E0) --------------------------------------------------------
void *__stdcall sub_4145E0(int a1)
{
  return sub_414E10(a1);
}

//----- (00414600) --------------------------------------------------------
void *__stdcall sub_414600(void *a1, void **a2)
{
  return sub_414E20(a1, a2);
}

//----- (00414620) --------------------------------------------------------
int __stdcall sub_414620(void *a1, int a2)
{
  return sub_414E60(a1, a2);
}

//----- (00414640) --------------------------------------------------------
void *__stdcall sub_414640(void *a1)
{
  return sub_414EE0(a1);
}

//----- (00414660) --------------------------------------------------------
void *__stdcall sub_414660(void *a1)
{
  return sub_414EF0(a1);
}

//----- (00414680) --------------------------------------------------------
int __cdecl sub_414680(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    sub_414510(a3, a1);
    a3 += 32;
    a1 += 32;
  }
  return a3;
}

//----- (004146C0) --------------------------------------------------------
void *__cdecl sub_4146C0(int a1, int a2, void *a3)
{
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    sub_414540(a3, a1);
    a3 = (char *)a3 + 32;
    a1 += 32;
  }
  return a3;
}

//----- (00414780) --------------------------------------------------------
int __cdecl sub_414780(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    sub_407C90(a3, a1);
    a3 += 380;
    a1 += 380;
  }
  return a3;
}

//----- (004147C0) --------------------------------------------------------
int __cdecl sub_4147C0(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    sub_407FC0(a3, a1);
    a3 += 32;
    a1 += 32;
  }
  return a3;
}

//----- (00414800) --------------------------------------------------------
int __cdecl sub_414800(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    *(_DWORD *)a3 = *(_DWORD *)a1;
    a3 += 4;
    a1 += 4;
  }
  return a3;
}

//----- (00414830) --------------------------------------------------------
int __cdecl sub_414830(int a1, int a2, int a3)
{
  char v4; // ST0C_1@1
  char v5; // [sp+3h] [bp-1h]@1
  char v6; // [sp+2h] [bp-2h]@1

  v5 = 0;
  v4 = *(_BYTE *)unknown_libname_18(&v6);
  return sub_415040(a1, a2, a3);
}

//----- (00414870) --------------------------------------------------------
void *__cdecl sub_414870(char a1, char a2, void *a3)
{
  return sub_413880(a1, a2, a3);
}

//----- (00414890) --------------------------------------------------------
int __cdecl sub_414890(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 - 32 * ((a2 - a1) >> 5);
  v4 = sub_404570((int)&a3);
  sub_415090(a1, a2, v4);
  return v5;
}

//----- (004148F0) --------------------------------------------------------
void *__cdecl sub_4148F0(char a1, char a2, void *a3)
{
  return sub_4150C0(a1, a2, a3);
}

//----- (00414910) --------------------------------------------------------
int __cdecl sub_414910(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 - 380 * (a2 - a1) / 380;
  v4 = sub_404570((int)&a3);
  sub_415120(a1, a2, v4);
  return v5;
}

//----- (00414970) --------------------------------------------------------
void *__cdecl sub_414970(char a1, char a2, void *a3)
{
  return sub_415160(a1, a2, a3);
}

//----- (00414990) --------------------------------------------------------
int __cdecl sub_414990(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 - 32 * ((a2 - a1) >> 5);
  v4 = sub_404570((int)&a3);
  sub_4151C0(a1, a2, v4);
  return v5;
}

//----- (004149F0) --------------------------------------------------------
void *__cdecl sub_4149F0(char a1, char a2, void *a3)
{
  return sub_4151F0(a1, a2, a3);
}

//----- (00414A10) --------------------------------------------------------
int __cdecl sub_414A10(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 - 4 * ((a2 - a1) >> 2);
  v4 = sub_404570((int)&a3);
  sub_415250(a1, a2, v4);
  return v5;
}

//----- (00414A70) --------------------------------------------------------
char *__cdecl sub_414A70(char a1, char a2, void *Dst)
{
  return sub_415280(a1, a2, Dst);
}

//----- (00414A90) --------------------------------------------------------
void *__cdecl sub_414A90(void *Src, int a2, int a3)
{
  int v4; // [sp+0h] [bp-8h]@1
  void *Dst; // [sp+4h] [bp-4h]@1

  v4 = (a2 - (_DWORD)Src) >> 1;
  Dst = (void *)(a3 - 2 * ((a2 - (_DWORD)Src) >> 1));
  if ( (a2 - (_DWORD)Src) >> 1 > 0 )
    memmove_s(Dst, 2 * v4, Src, 2 * v4);
  return Dst;
}

//----- (00414AE0) --------------------------------------------------------
int __cdecl sub_414AE0(int a1)
{
  return *(_DWORD *)a1;
}

//----- (00414AF0) --------------------------------------------------------
int __cdecl sub_414AF0(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3);
    a3 += 28;
    a1 += 28;
  }
  return a3;
}

//----- (00414B30) --------------------------------------------------------
int __cdecl sub_414B30(int a1, int a2, int a3)
{
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int  s; // [sp+44h] [bp+0h]@1
  unsigned int v9; // [sp+2Ch] [bp-18h]@1
  int v10; // [sp-4h] [bp-48h]@1
  int *v11; // [sp+34h] [bp-10h]@1
  int v12; // [sp+30h] [bp-14h]@1
  char v13; // [sp+10h] [bp-34h]@1
  signed int v14; // [sp+40h] [bp-4h]@1
  int v15; // [sp+Ch] [bp-38h]@4

  v9 = (unsigned int)& s ^ dword_43901C;
  v11 = &v10;
  v12 = a3;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    &v13,
    (unsigned int)& s ^ dword_43901C,
    ST08_4_0,
    ST0C_4_0,
    ST10_4_0);
  v14 = 0;
  LOBYTE(v14) = 1;
  while ( a1 != a2 )
  {
    sub_414620((void *)a3, (int)&v13);
    sub_4152E0(a3, a1);
    a3 += 28;
    a1 += 28;
  }
  v15 = a3;
  v14 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v13);
  return v15;
}

//----- (00414C30) --------------------------------------------------------
int __cdecl sub_414C30(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 28;
    a3 -= 28;
    sub_4152E0(a3, a2);
  }
  return a3;
}

//----- (00414C70) --------------------------------------------------------
int __cdecl sub_414C70(void *a1, int a2)
{
  void *v3; // eax@1
  void *v4; // [sp+10h] [bp-10h]@1
  int v5; // [sp+8h] [bp-18h]@1
  int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+4h] [bp-1Ch]@2

  v4 = a1;
  v3 = operator new(0x20u, a1);
  v5 = (int)v3;
  v6 = 0;
  if ( v3 )
    v7 = sub_40F2E0(v5, a2);
  else
    v7 = 0;
  return v7;
}

//----- (00414CF0) --------------------------------------------------------
void *__cdecl sub_414CF0(int a1)
{
  return sub_414F00(a1, 0);
}

//----- (00414D00) --------------------------------------------------------
int __cdecl sub_414D00(void *a1, int a2)
{
  void *v3; // eax@1
  void *v4; // [sp+10h] [bp-10h]@1
  int v5; // [sp+8h] [bp-18h]@1
  int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+4h] [bp-1Ch]@2

  v4 = a1;
  v3 = operator new(0x17Cu, a1);
  v5 = (int)v3;
  v6 = 0;
  if ( v3 )
    v7 = sub_4079E0(v5, a2);
  else
    v7 = 0;
  return v7;
}

//----- (00414D80) --------------------------------------------------------
void *__cdecl sub_414D80(int a1)
{
  return sub_414F30(a1, 0);
}

//----- (00414D90) --------------------------------------------------------
int __cdecl sub_414D90(void *a1, int a2)
{
  void *v3; // eax@1
  void *v4; // [sp+10h] [bp-10h]@1
  int v5; // [sp+8h] [bp-18h]@1
  int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+4h] [bp-1Ch]@2

  v4 = a1;
  v3 = operator new(0x20u, a1);
  v5 = (int)v3;
  v6 = 0;
  if ( v3 )
    v7 = sub_407F30(v5, a2);
  else
    v7 = 0;
  return v7;
}

//----- (00414E10) --------------------------------------------------------
void *__cdecl sub_414E10(int a1)
{
  return sub_414F60(a1, 0);
}

//----- (00414E20) --------------------------------------------------------
void *__cdecl sub_414E20(void *a1, void **a2)
{
  void *result; // eax@1
  void *v3; // [sp+4h] [bp-8h]@1

  result = operator new(4u, a1);
  v3 = result;
  if ( result )
  {
    result = *a2;
    *(_DWORD *)v3 = *a2;
  }
  return result;
}

//----- (00414E60) --------------------------------------------------------
int __cdecl sub_414E60(void *a1, int a2)
{
  void *v3; // eax@1
  void *v4; // [sp+10h] [bp-10h]@1
  void *v5; // [sp+8h] [bp-18h]@1
  int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+4h] [bp-1Ch]@2

  v4 = a1;
  v3 = operator new(0x1Cu, a1);
  v5 = v3;
  v6 = 0;
  if ( v3 )
    v7 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
  else
    v7 = 0;
  return v7;
}

//----- (00414EE0) --------------------------------------------------------
void *__cdecl sub_414EE0(void *a1)
{
  return sub_414F90(a1, 0);
}

//----- (00414EF0) --------------------------------------------------------
void *__cdecl sub_414EF0(void *a1)
{
  return sub_414FC0(a1, 0);
}

//----- (00414F00) --------------------------------------------------------
void *__thiscall sub_414F00(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_4080D0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00414F30) --------------------------------------------------------
void *__thiscall sub_414F30(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_4078E0(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00414F60) --------------------------------------------------------
void *__thiscall sub_414F60(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_407F10(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00414F90) --------------------------------------------------------
void *__thiscall sub_414F90(void *this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00414FC0) --------------------------------------------------------
void *__thiscall sub_414FC0(void *this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  call_naticq_event();
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00414FF0) --------------------------------------------------------
int __cdecl call_naticq_event()
{
  return naticq_event();
}

//----- (00415010) --------------------------------------------------------
int __cdecl sub_415010(int a1, int a2, int a3)
{
  int result; // eax@1

  result = *(_DWORD *)a3 + a2 - a1;
  *(_DWORD *)a3 = result;
  return result;
}

//----- (00415040) --------------------------------------------------------
int __cdecl sub_415040(int a1, int a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = a2;
  v6 = sub_404570((int)&a1);
  return sub_415320(v6, v5, v4);
}

//----- (00415080) --------------------------------------------------------
int __cdecl sub_415080()
{
  return sub_415300();
}

//----- (00415090) --------------------------------------------------------
int __cdecl sub_415090(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 32;
    a3 -= 32;
    sub_414510(a3, a2);
  }
  return a3;
}

//----- (004150C0) --------------------------------------------------------
void *__cdecl sub_4150C0(char a1, char a2, void *a3)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_415350(v8, v7, v6);
}

//----- (00415120) --------------------------------------------------------
int __cdecl sub_415120(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 380;
    a3 -= 380;
    sub_407C90(a3, a2);
  }
  return a3;
}

//----- (00415160) --------------------------------------------------------
void *__cdecl sub_415160(char a1, char a2, void *a3)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_415420(v8, v7, v6);
}

//----- (004151C0) --------------------------------------------------------
int __cdecl sub_4151C0(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 32;
    a3 -= 32;
    sub_407FC0(a3, a2);
  }
  return a3;
}

//----- (004151F0) --------------------------------------------------------
void *__cdecl sub_4151F0(char a1, char a2, void *a3)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_4154E0((void **)v8, (void **)v7, v6);
}

//----- (00415250) --------------------------------------------------------
int __cdecl sub_415250(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 4;
    a3 -= 4;
    *(_DWORD *)a3 = *(_DWORD *)a2;
  }
  return a3;
}

//----- (00415280) --------------------------------------------------------
char *__cdecl sub_415280(char a1, char a2, void *Dst)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = Dst;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_4155A0((void *)v8, v7, v6);
}

//----- (004152E0) --------------------------------------------------------
int __cdecl sub_4152E0(int a1, int a2)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char____swap(a1, a2);
}

//----- (00415320) --------------------------------------------------------
int __cdecl sub_415320(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a2 )
  {
    *(_WORD *)a1 = *(_WORD *)a3;
    result = a2-- - 1;
    a1 += 2;
  }
  return result;
}

//----- (00415350) --------------------------------------------------------
void *__cdecl sub_415350(int a1, int a2, void *a3)
{
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    sub_414580(a3, a1);
    a3 = (char *)a3 + 380;
    a1 += 380;
  }
  return a3;
}

//----- (00415420) --------------------------------------------------------
void *__cdecl sub_415420(int a1, int a2, void *a3)
{
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    sub_4145C0(a3, a1);
    a3 = (char *)a3 + 32;
    a1 += 32;
  }
  return a3;
}

//----- (004154E0) --------------------------------------------------------
void *__cdecl sub_4154E0(void **a1, void **a2, void *a3)
{
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    sub_414600(a3, a1);
    a3 = (char *)a3 + 4;
    ++a1;
  }
  return a3;
}

//----- (004155A0) --------------------------------------------------------
char *__cdecl sub_4155A0(void *Src, int a2, void *Dst)
{
  int v4; // [sp+4h] [bp-4h]@1
  char *v5; // [sp+0h] [bp-8h]@1

  v4 = (a2 - (_DWORD)Src) >> 1;
  v5 = (char *)Dst + 2 * ((a2 - (_DWORD)Src) >> 1);
  if ( (a2 - (_DWORD)Src) >> 1 )
    memmove_s(Dst, 2 * v4, Src, 2 * v4);
  return v5;
}

//----- (004155F0) --------------------------------------------------------
char *__cdecl strstr_my(char *a1, char *a2)
{
  return strstr(a1, a2);
}

//----- (00415610) --------------------------------------------------------
char __fastcall sub_415610(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return *(_BYTE *)(a1 + 788);
}

//----- (00415630) --------------------------------------------------------
void __cdecl ig11_mutex_toggle(unsigned __int16 a1)
{
  EnterCriticalSection((LPCRITICAL_SECTION)&stru_4395E4[a1]);
}

//----- (00415650) --------------------------------------------------------
void __cdecl ig11_mutex_create(unsigned __int16 a1)
{
  InitializeCriticalSection((LPCRITICAL_SECTION)&stru_4395E4[a1]);
}

//----- (00415670) --------------------------------------------------------
void __cdecl ig11_mutex_destroy(unsigned __int16 a1)
{
  DeleteCriticalSection((LPCRITICAL_SECTION)&stru_4395E4[a1]);
}

//----- (00415690) --------------------------------------------------------
int __fastcall sub_415690(int a1)
{
  int ST00_4_0; // ST00_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int v5; // ST04_4@1
  int v6; // ST04_4@1

  v5 = a1;
  sub_421470(a1);
  *(_DWORD *)v5 = &off_4334EC;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v5 + 1324,
    ST00_4_0,
    v5,
    ST08_4_0,
    ST0C_4_0);
  return v6;
}

//----- (00415700) --------------------------------------------------------
int __fastcall sub_415700(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 1324);
  return sub_421F30(v2);
}

//----- (00415760) --------------------------------------------------------
void *__thiscall sub_415760(int this, char a2)
{
  void *v3; // [sp+0h] [bp-4h]@1

  v3 = (void *)this;
  sub_415700(this);
  if ( a2 & 1 )
    operator delete(v3);
  return v3;
}

//----- (00415790) --------------------------------------------------------
int __thiscall sub_415790(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_415B20(a2, *(_DWORD *)(this + 12), this);
  return a2;
}

//----- (004157C0) --------------------------------------------------------
int __fastcall sub_4157C0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  return (*(_DWORD *)(a1 + 16) - *(_DWORD *)(a1 + 12)) / 48;
}

//----- (004157E0) --------------------------------------------------------
int __thiscall sub_4157E0(int this, unsigned int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  if ( a2 >= sub_4157C0(this) )
    invalid_parameter_noinfo(v3, v2);
  return *(_DWORD *)(v5 + 12) + 48 * a2;
}

//----- (00415810) --------------------------------------------------------
int __thiscall sub_415810(int this, int a2)
{
  int result; // eax@2
  int v3; // esi@1
  int v4; // eax@3
  int v5; // edx@3
  int v6; // [sp+4h] [bp-1Ch]@1
  char v7; // [sp+10h] [bp-10h]@3
  int v8; // [sp+18h] [bp-8h]@3
  int v9; // [sp+1Ch] [bp-4h]@3
  char v10; // [sp+8h] [bp-18h]@3

  v6 = this;
  v3 = sub_4157C0(this);
  if ( v3 >= (unsigned int)sub_4159D0(v6) )
  {
    v4 = sub_415A10(v6, (int)&v7);
    v5 = *(_DWORD *)(v4 + 4);
    v8 = *(_DWORD *)v4;
    v9 = v5;
    result = sub_415A60(v6, (int)&v10, v8, v5, a2);
  }
  else
  {
    result = sub_415AE0(*(void **)(v6 + 16), 1, a2);
    *(_DWORD *)(v6 + 16) = result;
  }
  return result;
}

//----- (00415890) --------------------------------------------------------
int __thiscall sub_415890(int this, int a2, int a3, unsigned int a4)
{
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  sub_4160F0((_BYTE)a4 + 48, *(_DWORD *)(this + 16), a4);
  sub_40E840((void *)(*(_DWORD *)(v5 + 16) - 48), *(void **)(v5 + 16));
  *(_DWORD *)(v5 + 16) -= 48;
  sub_415A40(v5, a2, a3, a4);
  return a2;
}

//----- (00415900) --------------------------------------------------------
int __thiscall sub_415900(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  sub_415970(this, a2);
  v4 = a3;
  *(_DWORD *)(v5 + 40) = *(_DWORD *)a3;
  *(_DWORD *)(v5 + 44) = *(_DWORD *)(v4 + 4);
  return v5;
}

//----- (00415930) --------------------------------------------------------
int __thiscall sub_415930(int this, int a2, int a3)
{
  int v4; // edx@1
  int v5; // eax@1
  int v6; // edx@1
  int v7; // [sp+0h] [bp-Ch]@1
  int v8; // [sp+4h] [bp-8h]@1
  int v9; // [sp+8h] [bp-4h]@1

  v7 = this;
  v4 = *(_DWORD *)(this + 4);
  v8 = *(_DWORD *)this;
  v9 = v4;
  v5 = sub_415B40((int)&v8, a3);
  v6 = *(_DWORD *)(v5 + 4);
  *(_DWORD *)a2 = *(_DWORD *)v5;
  *(_DWORD *)(a2 + 4) = v6;
  return a2;
}

//----- (00415970) --------------------------------------------------------
int __thiscall sub_415970(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  *(_WORD *)this = *(_WORD *)a2;
  *(_WORD *)(v3 + 2) = *(_WORD *)(a2 + 2);
  *(_WORD *)(v3 + 4) = *(_WORD *)(a2 + 4);
  *(_DWORD *)(v3 + 8) = *(_DWORD *)(a2 + 8);
  sub_4037A0(v3 + 12, a2 + 12);
  return v3;
}

//----- (004159D0) --------------------------------------------------------
int __fastcall sub_4159D0(int a1)
{
  int v2; // [sp+4h] [bp-4h]@1
  int v3; // [sp+0h] [bp-8h]@2

  v2 = a1;
  if ( *(_DWORD *)(a1 + 12) )
    v3 = (*(_DWORD *)(v2 + 20) - *(_DWORD *)(v2 + 12)) / 48;
  else
    v3 = 0;
  return v3;
}

//----- (00415A10) --------------------------------------------------------
int __thiscall sub_415A10(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_415B20(a2, *(_DWORD *)(this + 16), this);
  return a2;
}

//----- (00415A40) --------------------------------------------------------
int __thiscall sub_415A40(int this, int a2, int a3, unsigned int a4)
{
  sub_415B20(a2, a4, this);
  return a2;
}

//----- (00415A60) --------------------------------------------------------
int __thiscall sub_415A60(int this, int a2, int a3, int a4, int a5)
{
  int v6; // eax@3
  int v7; // ST0C_4@4
  int v8; // ST08_4@4
  int v9; // eax@4
  int v10; // [sp+4h] [bp-18h]@1
  int v11; // [sp+0h] [bp-1Ch]@2
  char v12; // [sp+10h] [bp-Ch]@3
  int v13; // [sp+18h] [bp-4h]@4
  char v14; // [sp+8h] [bp-14h]@4

  v10 = this;
  if ( sub_4157C0(this) )
  {
    v6 = sub_415790(v10, (int)&v12);
    v11 = sub_416070((int)&a3, v6);
  }
  else
  {
    v11 = 0;
  }
  v13 = v11;
  sub_415B60(v10, a3, a4, 1, a5);
  v7 = v13;
  v8 = a2;
  v9 = sub_415790(v10, (int)&v14);
  sub_415930(v9, v8, v7);
  return a2;
}

//----- (00415AE0) --------------------------------------------------------
int __stdcall sub_415AE0(void *a1, int a2, int a3)
{
  sub_416160(a1, a2, a3);
  return (int)((char *)a1 + 48 * a2);
}

//----- (00415B20) --------------------------------------------------------
int __thiscall sub_415B20(int this, unsigned int a2, int a3)
{
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  sub_415FA0(this, a2, a3);
  return v4;
}

//----- (00415B40) --------------------------------------------------------
int __thiscall sub_415B40(int this, int a2)
{
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  sub_415FF0(this, a2);
  return v3;
}

//----- (00415B60) --------------------------------------------------------
void *__thiscall sub_415B60(int this, int a2, int a3, int a4, int a5)
{
  void *result; // eax@1
  int v6; // esi@3
  void *v7; // eax@11
  void *v8; // eax@11
  int v9; // eax@11
  int v10; // [sp+0h] [bp-A8h]@1
  int *v11; // [sp+98h] [bp-10h]@1
  int v12; // [sp+1Ch] [bp-8Ch]@1
  int v13; // [sp+94h] [bp-14h]@1
  int v14; // [sp+18h] [bp-90h]@7
  void *v15; // [sp+8Ch] [bp-1Ch]@11
  void *v16; // [sp+90h] [bp-18h]@11
  signed int v17; // [sp+A4h] [bp-4h]@11
  void *v18; // [sp+14h] [bp-94h]@11
  int v19; // [sp+10h] [bp-98h]@11
  char v20; // [sp+58h] [bp-50h]@15
  char v21; // [sp+20h] [bp-88h]@16
  int v22; // [sp+54h] [bp-54h]@16

  v11 = &v10;
  v12 = this;
  result = (void *)sub_4159D0(this);
  v13 = (int)result;
  if ( a4 )
  {
    v6 = sub_4157C0(v12);
    if ( sub_40E820() - v6 >= (unsigned int)a4 )
    {
      if ( v13 >= (unsigned int)(a4 + sub_4157C0(v12)) )
      {
        if ( (*(_DWORD *)(v12 + 16) - a3) / 48 >= (unsigned int)a4 )
        {
          sub_4160C0((int)&v21, a5);
          v17 = 5;
          v22 = *(_DWORD *)(v12 + 16);
          *(_DWORD *)(v12 + 16) = unknown_libname_19(v22 - 48 * a4, v22, *(_DWORD *)(v12 + 16));
          sub_416210(a3, v22 - 48 * a4, v22);
          sub_4161E0(a3, (_BYTE)a3 + 48 * (_BYTE)a4, (int)&v21);
          v17 = -1;
          result = (void *)call_naticq_event();
        }
        else
        {
          sub_4160C0((int)&v20, a5);
          v17 = 2;
          unknown_libname_19(a3, *(_DWORD *)(v12 + 16), a3 + 48 * a4);
          LOBYTE(v17) = 3;
          sub_415AE0(*(void **)(v12 + 16), a4 - (*(_DWORD *)(v12 + 16) - a3) / 48, (int)&v20);
          v17 = 2;
          *(_DWORD *)(v12 + 16) += 48 * a4;
          sub_4161E0(a3, *(_DWORD *)(v12 + 16) - 48 * a4, (int)&v20);
          v17 = -1;
          result = (void *)call_naticq_event();
        }
      }
      else
      {
        if ( sub_40E820() - ((unsigned int)v13 >> 1) >= v13 )
          v14 = v13 + ((unsigned int)v13 >> 1);
        else
          v14 = 0;
        v13 = v14;
        if ( v13 < (unsigned int)(a4 + sub_4157C0(v12)) )
          v13 = a4 + sub_4157C0(v12);
        v7 = sub_40E870(v13);
        v15 = v7;
        v16 = v7;
        v17 = 0;
        v8 = (void *)unknown_libname_19(*(_DWORD *)(v12 + 12), a3, v7);
        v18 = v8;
        v16 = v8;
        v9 = sub_415AE0(v8, a4, a5);
        v19 = v9;
        v16 = (void *)v9;
        unknown_libname_19(a3, *(_DWORD *)(v12 + 16), v9);
        v17 = -1;
        a4 += sub_4157C0(v12);
        if ( *(_DWORD *)(v12 + 12) )
        {
          sub_40E840(*(void **)(v12 + 12), *(void **)(v12 + 16));
          unknown_libname_2(*(void **)(v12 + 12), (*(_DWORD *)(v12 + 20) - *(_DWORD *)(v12 + 12)) / 48);
        }
        *(_DWORD *)(v12 + 20) = (char *)v15 + 48 * v13;
        *(_DWORD *)(v12 + 16) = (char *)v15 + 48 * a4;
        result = v15;
        *(_DWORD *)(v12 + 12) = v15;
      }
    }
    else
    {
      result = (void *)sub_40C910();
    }
  }
  return result;
}

//----- (00415FA0) --------------------------------------------------------
int __thiscall sub_415FA0(int this, unsigned int a2, int a3)
{
  int v3; // edx@1
  unsigned int v4; // ecx@1
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  sub_40F310(this);
  if ( !a3 || (v4 = *(_DWORD *)(a3 + 12), v4 > a2) || (v3 = a3, a2 > *(_DWORD *)(a3 + 16)) )
    invalid_parameter_noinfo(v4, v3);
  sub_401060(v6, a3);
  *(_DWORD *)(v6 + 4) = a2;
  return v6;
}

//----- (00415FF0) --------------------------------------------------------
int __thiscall sub_415FF0(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  int v4; // edx@3
  int v5; // ecx@3
  int v7; // [sp+4h] [bp-4h]@1

  v7 = this;
  if ( !(unsigned __int8)sub_4010D0(this) )
    invalid_parameter_noinfo(v3, v2);
  if ( (unsigned int)(*(_DWORD *)(v7 + 4) + 48 * a2) > *(_DWORD *)(sub_401080(v7) + 16)
    || (unsigned int)(*(_DWORD *)(v7 + 4) + 48 * a2) < *(_DWORD *)(sub_401080(v7) + 12) )
    invalid_parameter_noinfo(v5, v4);
  *(_DWORD *)(v7 + 4) += 48 * a2;
  return v7;
}

//----- (00416070) --------------------------------------------------------
int __thiscall sub_416070(int this, int a2)
{
  int v2; // edx@1
  int v3; // ecx@1
  unsigned __int8 v5; // al@2
  int v6; // [sp+0h] [bp-4h]@1

  v6 = this;
  if ( !(unsigned __int8)sub_4010D0(this) || (v5 = sub_4010B0(v6, a2), v2 = v5, !v5) )
    invalid_parameter_noinfo(v3, v2);
  return (*(_DWORD *)(v6 + 4) - *(_DWORD *)(a2 + 4)) / 48;
}

//----- (004160C0) --------------------------------------------------------
int __thiscall sub_4160C0(int this, int a2)
{
  int v3; // edx@1
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  sub_415970(this, a2);
  v3 = a2;
  *(_DWORD *)(v4 + 40) = *(_DWORD *)(a2 + 40);
  *(_DWORD *)(v4 + 44) = *(_DWORD *)(v3 + 44);
  return v4;
}

//----- (004160F0) --------------------------------------------------------
int __cdecl sub_4160F0(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_416280(v7, v6, v5);
}

//----- (00416160) --------------------------------------------------------
int __cdecl sub_416160(void *a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_4162E0(a1, a2, a3);
}

//----- (004161E0) --------------------------------------------------------
int __cdecl sub_4161E0(char a1, char a2, int a3)
{
  int v4; // ST08_4@1
  int v5; // ST04_4@1
  int v6; // eax@1

  v4 = a3;
  v5 = sub_404570((int)&a2);
  v6 = sub_404570((int)&a1);
  return sub_4163F0(v6, v5, v4);
}

//----- (00416210) --------------------------------------------------------
int __cdecl sub_416210(char a1, char a2, int a3)
{
  char v4; // ST0C_1@1
  int v5; // ST08_4@1
  int v6; // ST04_4@1
  int v7; // eax@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1
  char v10; // [sp+1h] [bp-3h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v4 = *(_BYTE *)unknown_libname_18(&v10);
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_416420(v7, v6, v5);
}

//----- (00416280) --------------------------------------------------------
int __cdecl sub_416280(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 + 48 * (a2 - a1) / 48;
  v4 = sub_404570((int)&a3);
  sub_4164C0(a1, a2, v4);
  return v5;
}

//----- (004162E0) --------------------------------------------------------
int __cdecl sub_4162E0(void *a1, int a2, int a3)
{
  int result; // eax@1
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  result = (int)a1;
  v7 = a1;
  v8 = 0;
  while ( a2 )
  {
    result = sub_4164A0(a1, a3);
    --a2;
    a1 = (char *)a1 + 48;
  }
  return result;
}

//----- (004163A0) --------------------------------------------------------
void *__cdecl sub_4163A0(char a1, char a2, void *a3)
{
  void *v5; // ST08_4@1
  char v6; // ST04_1@1
  char v7; // al@1
  char v8; // [sp+3h] [bp-1h]@1
  char v9; // [sp+2h] [bp-2h]@1

  v8 = 0;
  v9 = unknown_libname_17();
  v5 = a3;
  v6 = sub_404570((int)&a2);
  v7 = sub_404570((int)&a1);
  return sub_416500(v7, v6, v5);
}

//----- (004163F0) --------------------------------------------------------
int __cdecl sub_4163F0(int a1, int a2, int a3)
{
  int result; // eax@2

  while ( a1 != a2 )
  {
    sub_416470(a1, a3);
    result = a1 + 48;
    a1 += 48;
  }
  return result;
}

//----- (00416420) --------------------------------------------------------
int __cdecl sub_416420(int a1, int a2, int a3)
{
  char v5; // al@1
  char v6; // [sp+3h] [bp-1h]@1

  v6 = 0;
  v5 = unknown_libname_17();
  return sub_416520(a1, a2, a3);
}

//----- (00416470) --------------------------------------------------------
int __thiscall sub_416470(int this, int a2)
{
  int v3; // edx@1
  int v4; // [sp+0h] [bp-4h]@1

  v4 = this;
  sub_407F60(this, a2);
  v3 = a2;
  *(_DWORD *)(v4 + 40) = *(_DWORD *)(a2 + 40);
  *(_DWORD *)(v4 + 44) = *(_DWORD *)(v3 + 44);
  return v4;
}

//----- (004164A0) --------------------------------------------------------
int __stdcall sub_4164A0(void *a1, int a2)
{
  return sub_416580(a1, a2);
}

//----- (004164C0) --------------------------------------------------------
int __cdecl sub_4164C0(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    sub_416470(a3, a1);
    a3 += 48;
    a1 += 48;
  }
  return a3;
}

//----- (00416500) --------------------------------------------------------
void *__cdecl sub_416500(char a1, char a2, void *a3)
{
  return sub_416600(a1, a2, a3);
}

//----- (00416520) --------------------------------------------------------
int __cdecl sub_416520(int a1, int a2, int a3)
{
  int v4; // eax@1
  int v5; // [sp+4h] [bp-4h]@1

  v5 = a3 - 48 * (a2 - a1) / 48;
  v4 = sub_404570((int)&a3);
  sub_416660(a1, a2, v4);
  return v5;
}

//----- (00416580) --------------------------------------------------------
int __cdecl sub_416580(void *a1, int a2)
{
  void *v3; // eax@1
  void *v4; // [sp+10h] [bp-10h]@1
  int v5; // [sp+8h] [bp-18h]@1
  int v6; // [sp+1Ch] [bp-4h]@1
  int v7; // [sp+4h] [bp-1Ch]@2

  v4 = a1;
  v3 = operator new(0x30u, a1);
  v5 = (int)v3;
  v6 = 0;
  if ( v3 )
    v7 = sub_4160C0(v5, a2);
  else
    v7 = 0;
  return v7;
}

//----- (00416600) --------------------------------------------------------
void *__cdecl sub_416600(char a1, char a2, void *a3)
{
  char v5; // al@1
  void *v6; // ST08_4@1
  int v7; // ST04_4@1
  int v8; // eax@1
  char v9; // [sp+3h] [bp-1h]@1

  v9 = 0;
  v5 = unknown_libname_17();
  v6 = a3;
  v7 = sub_404570((int)&a2);
  v8 = sub_404570((int)&a1);
  return sub_416690(v8, v7, v6);
}

//----- (00416660) --------------------------------------------------------
int __cdecl sub_416660(int a1, int a2, int a3)
{
  while ( a1 != a2 )
  {
    a2 -= 48;
    a3 -= 48;
    sub_416470(a3, a2);
  }
  return a3;
}

//----- (00416690) --------------------------------------------------------
void *__cdecl sub_416690(int a1, int a2, void *a3)
{
  int v5; // [sp+0h] [bp-24h]@1
  int *v6; // [sp+14h] [bp-10h]@1
  void *v7; // [sp+10h] [bp-14h]@1
  int v8; // [sp+20h] [bp-4h]@1

  v6 = &v5;
  v7 = a3;
  v8 = 0;
  while ( a1 != a2 )
  {
    sub_4164A0(a3, a1);
    a3 = (char *)a3 + 48;
    a1 += 48;
  }
  return a3;
}

//----- (004167BC) --------------------------------------------------------
BOOL __usercall sub_4167BC<eax>(int a1<eax>, int a2<edx>, int a3<ecx>, int a4<ebx>, int a5<edi>, int a6<esi>, char a7)
{
  if ( a3 == dword_43901C )
    __asm { rep retn }
  return sub_416BBC(a1, a2, a3, a4, a5, a6, a7);
}

//----- (004168F3) --------------------------------------------------------
int __cdecl sub_4168F3(_onexit_t Func)
{
  return (_onexit(Func) != 0) - 1;
}

//----- (00416BBC) --------------------------------------------------------
BOOL __usercall sub_416BBC<eax>(int a1<eax>, int a2<edx>, int a3<ecx>, int a4<ebx>, int a5<edi>, int a6<esi>, char a7)
{
  int ST04_4_0; // ST04_4@0
  HANDLE v9; // eax@3
  int  s; // [sp+328h] [bp+0h]@1
  int  r; // [sp+32Ch] [bp+4h]@1
  int v12; // [sp+0h] [bp-328h]@1
  int v13; // [sp+4h] [bp-324h]@1

  dword_4393B8 = a1;
  dword_4393B4 = a3;
  dword_4393B0 = a2;
  dword_4393AC = a4;
  dword_4393A8 = a6;
  dword_4393A4 = a5;
  word_4393D0 = __SS__;
  word_4393C4 = __CS__;
  word_4393A0 = __DS__;
  word_43939C = __ES__;
  word_439398 = __FS__;
  word_439394 = __GS__;
  __asm { pushf }
  dword_4393C8 = ST04_4_0;
  dword_4393BC =  s;
  dword_4393C0 =  r;
  dword_4393CC = (int)&a7;
  dword_439308 = 65537;
  dword_4392BC = dword_4393C0;
  dword_4392B0 = -1073740791;
  dword_4392B4 = 1;
  v12 = dword_43901C;
  v13 = dword_439020;
  dword_439300 = IsDebuggerPresent();
  crt_debugger_hook(1);
  SetUnhandledExceptionFilter(0);
  UnhandledExceptionFilter(&ExceptionInfo);
  if ( !dword_439300 )
    crt_debugger_hook(1);
  v9 = GetCurrentProcess();
  return TerminateProcess(v9, 0xC0000409u);
}

//----- (00416D71) --------------------------------------------------------
void __usercall sub_416D71(int a1<ebp>)
{
  if ( !*(_DWORD *)(a1 - 28) )
    __ArrayUnwind(
      *(void **)(a1 + 8),
      *(_DWORD *)(a1 + 12),
      *(_DWORD *)(a1 + 16),
      *(void (__thiscall **)(void *))(a1 + 20));
}

//----- (00416DF5) --------------------------------------------------------
int __cdecl sub_416DF5(int a1, int a2, int a3, int a4)
{
  return except_handler4_common(&dword_43901C, sub_4167BC, a1, a2, a3, a4);
}

//----- (00416E1A) --------------------------------------------------------
int __stdcall sub_416E1A(int a1)
{
  _DWORD *v1; // eax@1
  signed int v2; // eax@3

  v1 = *(_DWORD **)a1;
  if ( **(_DWORD **)a1 == -529697949 )
  {
    if ( *(v1 + 4) == 3 )
    {
      v2 = *(v1 + 5);
      if ( v2 == 429065504 || v2 == 429065505 || v2 == 429065506 || v2 == 26820608 )
        terminate();
    }
  }
  return 0;
}

//----- (00416E70) --------------------------------------------------------
int (*__cdecl sub_416E70())(void)
{
  int (*result)(void); // eax@1
  unsigned int v1; // edi@1

  result = (int (*)(void))&unk_433C7C;
  v1 = (unsigned int)&unk_433C7C;
  if ( &unk_433C7C < &unk_433C7C )
  {
    do
    {
      result = *(int (**)(void))v1;
      if ( *(_DWORD *)v1 )
        result = (int (*)(void))result();
      v1 += 4;
    }
    while ( v1 < (unsigned int)&unk_433C7C );
  }
  return result;
}

//----- (00416ED0) --------------------------------------------------------
bool __cdecl sub_416ED0(int a1)
{
  bool result; // eax@2
  int v2; // eax@3

  if ( *(_WORD *)a1 != 23117 || (v2 = a1 + *(_DWORD *)(a1 + 60), *(_DWORD *)v2 != 17744) )
    result = 0;
  else
    result = *(_WORD *)(v2 + 24) == 267;
  return result;
}

//----- (00416F10) --------------------------------------------------------
int __cdecl sub_416F10(int a1, unsigned int a2)
{
  int result; // eax@1
  unsigned int v3; // edx@1
  unsigned int v4; // esi@1
  unsigned int v5; // ecx@2
  int v6; // ecx@1

  v6 = a1 + *(_DWORD *)(a1 + 60);
  v4 = *(_WORD *)(v6 + 6);
  v3 = 0;
  result = *(_WORD *)(v6 + 20) + v6 + 24;
  if ( v4 )
  {
    while ( 1 )
    {
      v5 = *(_DWORD *)(result + 12);
      if ( a2 >= v5 )
      {
        if ( a2 < v5 + *(_DWORD *)(result + 8) )
          break;
      }
      ++v3;
      result += 40;
      if ( v3 >= v4 )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    result = 0;
  }
  return result;
}

//----- (00416F60) --------------------------------------------------------
unsigned int __usercall sub_416F60<eax>(int a1<eax>, int a2)
{
  int v2; // eax@2
  unsigned int result; // eax@3
  int (__cdecl *v4)(int, int, int, int); // [sp+Ch] [bp-Ch]@1
  int v5; // [sp+8h] [bp-10h]@1
  unsigned int v6; // [sp+10h] [bp-8h]@1
  int v7; // [sp-10h] [bp-28h]@1
  int *v8; // [sp+0h] [bp-18h]@1
  int v9; // [sp+14h] [bp-4h]@1

  v4 = sub_416DF5;
  v5 = a1;
  v6 = dword_43901C ^ (unsigned int)&unk_433D08;
  v8 = &v7;
  v9 = 0;
  if ( sub_416ED0(4194304) && (v2 = sub_416F10(4194304, a2 - 4194304), v2) )
    result = ~(unsigned __int8)(*(_DWORD *)(v2 + 36) >> 31) & 1;
  else
    result = 0;
  return result;
}

//----- (0041702A) --------------------------------------------------------
errno_t __cdecl sub_41702A()
{
  errno_t result; // eax@1

  result = controlfp_s(0, 0x10000u, 0x30000u);
  if ( result )
    result = invoke_watson(0, 0, 0, 0, 0);
  return result;
}

//----- (00417055) --------------------------------------------------------
int __cdecl sub_417055()
{
  return 0;
}

//----- (00417058) --------------------------------------------------------
unsigned __int32 __cdecl sub_417058()
{
  unsigned __int32 result; // eax@3
  int v1; // esi@4
  unsigned __int32 v2; // esi@4
  unsigned __int32 v3; // esi@4
  unsigned __int32 v4; // esi@4
  struct _FILETIME SystemTimeAsFileTime; // [sp+10h] [bp-8h]@1
  LARGE_INTEGER PerformanceCount; // [sp+8h] [bp-10h]@4

  SystemTimeAsFileTime.dwLowDateTime = 0;
  SystemTimeAsFileTime.dwHighDateTime = 0;
  if ( dword_43901C != -1153374642 && dword_43901C & 0xFFFF0000 )
  {
    result = ~dword_43901C;
    dword_439020 = ~dword_43901C;
  }
  else
  {
    GetSystemTimeAsFileTime(&SystemTimeAsFileTime);
    v2 = GetCurrentProcessId() ^ SystemTimeAsFileTime.dwLowDateTime ^ SystemTimeAsFileTime.dwHighDateTime;
    v3 = GetCurrentThreadId() ^ v2;
    v4 = GetTickCount() ^ v3;
    QueryPerformanceCounter(&PerformanceCount);
    result = PerformanceCount.LowPart ^ PerformanceCount.HighPart;
    v1 = PerformanceCount.LowPart ^ PerformanceCount.HighPart ^ v4;
    if ( v1 == -1153374642 )
    {
      v1 = -1153374641;
    }
    else
    {
      if ( !(v1 & 0xFFFF0000) )
      {
        result = v1 << 16;
        v1 |= v1 << 16;
      }
    }
    dword_43901C = v1;
    dword_439020 = ~v1;
  }
  return result;
}

//----- (00417120) --------------------------------------------------------
void __cdecl status_update()
{
  FILE *v0; // eax@3
  void *v1; // eax@5
  void *v2; // eax@5
  FILE *v3; // eax@5
  FILE *v4; // [sp+10h] [bp-Ch]@3
  size_t v5; // [sp+4h] [bp-18h]@5
  void *v6; // [sp+18h] [bp-4h]@5
  size_t v7; // [sp+14h] [bp-8h]@5
  void *v8; // [sp+Ch] [bp-10h]@5
  size_t v9; // [sp+0h] [bp-1Ch]@5
  FILE *v10; // [sp+8h] [bp-14h]@5

  if ( path_to_stat )
  {
    v0 = fopen("stat_template.txt", "r");
    v4 = v0;
    if ( v0 )
    {
      fseek(v4, 0, 2);
      v5 = ftell(v4);
      fseek(v4, 0, 0);
      v1 = malloc(v5 + 1);
      v6 = v1;
      memset(v1, 0, v5 + 1);
      fread(v6, v5, 1u, v4);
      fclose(v4);
      v7 = v5 + 17;
      v2 = malloc(v5 + 17);
      v8 = v2;
      memset(v2, 0, v7);
      sprintf((char *)v8, (const char *)v6, (unsigned __int16)clientsNum);
      v9 = strlen((const char *)v8);
      v3 = fopen(path_to_stat, L"w");
      v10 = v3;
      fwrite(v8, v9, 1u, v3);
      fclose(v10);
      free(v8);
      free(v6);
    }
    else
    {
      printf("\nCannot open template, exiting...\n");
    }
  }
}

//----- (00417290) --------------------------------------------------------
__time64_t __cdecl sub_417290(__time64_t *Time)
{
  return time64(Time);
}

//----- (004172B0) --------------------------------------------------------
int __thiscall sub_4172B0(int this, unsigned int a2, int a3)
{
  int result; // eax@2
  int v4; // edi@3
  __time64_t v5; // qax@3
  unsigned int v6; // esi@3
  int v7; // edi@3
  int v8; // eax@3
  int v9; // ST08_4@6
  int v10; // eax@6
  int v11; // eax@6
  unsigned int v12; // edx@6
  int v13; // [sp+10h] [bp-28h]@1
  unsigned int v14; // [sp+34h] [bp-4h]@1
  int v15; // [sp+8h] [bp-30h]@3
  int v16; // [sp+Ch] [bp-2Ch]@3
  char v17; // [sp+24h] [bp-14h]@6
  char v18; // [sp+1Ch] [bp-1Ch]@6
  int v19; // [sp+2Ch] [bp-Ch]@6
  unsigned int v20; // [sp+30h] [bp-8h]@6
  char v21; // [sp+14h] [bp-24h]@6

  v13 = this;
  v14 = 0;
  while ( 1 )
  {
    result = sub_4157C0(v13);
    if ( v14 >= result )
      break;
    v5 = sub_417290(0);
    v6 = v5;
    v7 = *((_DWORD *)&v5 + 1);
    v8 = sub_4157E0(v13, v14);
    v4 = v7 - ((v6 < *(_DWORD *)(v8 + 40)) + *(_DWORD *)(v8 + 44));
    v15 = v6 - *(_DWORD *)(v8 + 40);
    v16 = v4;
    if ( v4 < a3 || v4 <= a3 && v15 < a2 )
    {
      ++v14;
    }
    else
    {
      v9 = v14;
      v10 = sub_415790(v13, (int)&v17);
      v11 = sub_415930(v10, (int)&v18, v9);
      v12 = *(_DWORD *)(v11 + 4);
      v19 = *(_DWORD *)v11;
      v20 = v12;
      sub_415890(v13, (int)&v21, v19, v12);
    }
  }
  return result;
}

//----- (00417360) --------------------------------------------------------
char __thiscall sub_417360(int this, int a2)
{
  int v3; // eax@9
  int v4; // ST08_4@9
  int v5; // eax@9
  int v6; // eax@9
  unsigned int v7; // edx@9
  int v8; // [sp+0h] [bp-28h]@1
  unsigned int v9; // [sp+24h] [bp-4h]@1
  char v10; // [sp+14h] [bp-14h]@9
  char v11; // [sp+Ch] [bp-1Ch]@9
  int v12; // [sp+1Ch] [bp-Ch]@9
  unsigned int v13; // [sp+20h] [bp-8h]@9
  char v14; // [sp+4h] [bp-24h]@9

  v8 = this;
  v9 = 0;
  while ( v9 < sub_4157C0(v8) )
  {
    if ( (*(_WORD *)sub_4157E0(v8, v9) == *(_WORD *)a2 || !*(_WORD *)a2)
      && (*(_WORD *)(sub_4157E0(v8, v9) + 2) == *(_WORD *)(a2 + 2) || !*(_WORD *)(a2 + 2))
      && (*(_DWORD *)(sub_4157E0(v8, v9) + 8) == *(_DWORD *)(a2 + 8) || !*(_DWORD *)(a2 + 8)) )
    {
      v3 = sub_4157E0(v8, v9);
      sub_407F60(a2, v3);
      v4 = v9;
      v5 = sub_415790(v8, (int)&v10);
      v6 = sub_415930(v5, (int)&v11, v4);
      v7 = *(_DWORD *)(v6 + 4);
      v12 = *(_DWORD *)v6;
      v13 = v7;
      sub_415890(v8, (int)&v14, v12, v7);
      return 1;
    }
    ++v9;
  }
  return 0;
}

//----- (00417460) --------------------------------------------------------
int __thiscall sub_417460(int this, int a2)
{
  int v3; // eax@1
  int v4; // [sp+Ch] [bp-48h]@1
  __time64_t v5; // [sp+10h] [bp-44h]@1
  char v6; // [sp+18h] [bp-3Ch]@1
  signed int v7; // [sp+50h] [bp-4h]@1

  v4 = this;
  v5 = sub_417290(0);
  v3 = sub_415900((int)&v6, a2, (int)&v5);
  v7 = 0;
  sub_415810(v4, v3);
  v7 = -1;
  return call_naticq_event();
}

//----- (004174F0) --------------------------------------------------------
char *__cdecl sub_4174F0(char *a1, __int16 a2)
{
  char *result; // eax@3
  int v3; // [sp+0h] [bp-4h]@1

  v3 = (unsigned __int16)a2;
  if ( (unsigned __int16)a2 > 0xEu )
  {
LABEL_11:
    result = (char *)sprintf(a1, "Unknown code %u", (unsigned __int16)a2);
  }
  else
  {
    switch ( v3 )
    {
      case 0:
        result = strcpy(a1, "OK");
        break;
      case 2:
        result = strcpy(a1, "Not found");
        break;
      case 3:
        result = strcpy(a1, "Allready exist");
        break;
      case 4:
        result = strcpy(a1, "Network error");
        break;
      case 10:
        result = strcpy(a1, "Can't add");
        break;
      case 12:
        result = strcpy(a1, "Limit reached");
        break;
      case 13:
        result = strcpy(a1, "AIM<->ICQ not alowed");
        break;
      case 14:
        result = strcpy(a1, "Contact need auth");
        break;
      case 1:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 11:
        goto LABEL_11;
    }
  }
  return result;
}

//----- (00417610) --------------------------------------------------------
signed int __cdecl recv_packet(SOCKET s, char *p->pkt.uin, int a3)
{
  signed int result; // eax@2
  int v4; // eax@6
  int v5; // eax@31
  int v6; // eax@43
  u_long len; // [sp+128h] [bp-4h]@1
  struct timeval timeout; // [sp+118h] [bp-14h]@4
  fd_set readfds; // [sp+Ch] [bp-120h]@4
  int v10; // [sp+4h] [bp-128h]@6
  char *v11; // [sp+124h] [bp-8h]@24
  u_long v12; // [sp+8h] [bp-124h]@24
  int v13; // [sp+0h] [bp-12Ch]@31
  int v14; // [sp+120h] [bp-Ch]@43

  len = 0;
  if ( ioctlsocket(s, 1074030207, &len) )
    return -1;
  if ( len >= 8 )
    goto LABEL_49;
  timeout.tv_sec = a3;
  timeout.tv_usec = 10000;
  readfds.fd_count = 0;
  v4 = select(s + 1, &readfds, 0, 0, &timeout);
  v10 = v4;
  if ( !v4 )
    return 0;
  if ( v10 < 0 )
    return -1;
  if ( !_WSAFDIsSet(s, &readfds) )
    return -1;
  len = 0;
  if ( ioctlsocket(s, 1074030207, &len) )
    return -1;
  if ( len >= 1 )
  {
LABEL_49:
    if ( len >= 8 )
    {
      if ( recv(s, p->pkt.uin, 8, 0) == 8 )
      {
        if ( (signed int)*((_WORD *)p->pkt.uin + 3) <= 16383 )
        {
          if ( *((_WORD *)p->pkt.uin + 3) )
          {
            v11 = p->pkt.uin + 8;
            v12 = *((_WORD *)p->pkt.uin + 3);
            while ( (signed int)v12 > 0 )
            {
              len = 0;
              if ( ioctlsocket(s, 1074030207, &len) )
                return -1;
              if ( !len )
              {
                timeout.tv_sec = 120;
                timeout.tv_usec = 0;
                readfds.fd_count = 0;
                v5 = select(s + 1, &readfds, 0, 0, &timeout);
                v13 = v5;
                if ( !v5 )
                  return -1;
                if ( v13 < 0 )
                  return -1;
                if ( !_WSAFDIsSet(s, &readfds) )
                  return -1;
                len = 0;
                if ( ioctlsocket(s, 1074030207, &len) )
                  return -1;
              }
              if ( len < 1 )
                return -1;
              if ( len > v12 )
                len = v12;
              v6 = recv(s, v11, len, 0);
              v14 = v6;
              if ( v6 <= 0 )
                return -1;
              v11 += v14;
              v12 -= v14;
            }
            result = 1;
          }
          else
          {
            result = 1;
          }
        }
        else
        {
          result = -1;
        }
      }
      else
      {
        result = -1;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = -1;
  }
  return result;
}

//----- (004178F0) --------------------------------------------------------
__int16 __thiscall send_packet(int this, char *p->pkt.uin)
{
  int v3; // eax@4
  int v4; // [sp+4h] [bp-8h]@1
  int v5; // [sp+0h] [bp-Ch]@2
  int len; // [sp+8h] [bp-4h]@4

  v4 = this;
  if ( !*(_BYTE *)(this + 1320) )
    goto LABEL_8;
  v5 = rand();
  __asm
  {
    fild    [ebp+var_C]
    fcomp   ds:dbl_433530
    fnstsw  ax
  }
  if ( BYTE1(_EAX) & 0x41 )
  {
LABEL_8:
    v3 = *((_WORD *)p->pkt.uin + 3);
    len = v3 + 8;
    send(*(_DWORD *)(v4 + 800), p->pkt.uin, v3 + 8, 0);
    _EAX = len + *(_DWORD *)(v4 + 796);
    *(_DWORD *)(v4 + 796) = _EAX;
  }
  return _EAX;
}

//----- (00417970) --------------------------------------------------------
int __thiscall onAuthReply(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16)
{
  int v17; // eax@1
  int  s; // [sp+4024h] [bp+0h]@1
  unsigned int v19; // [sp+4014h] [bp-10h]@1
  int v20; // [sp+4h] [bp-4020h]@1
  signed int v21; // [sp+4020h] [bp-4h]@1
  int p->pkt.uin; // [sp+8h] [bp-401Ch]@1
  __int16 v23; // [sp+Ch] [bp-4018h]@1
  char *v24; // [sp+0h] [bp-4024h]@2
  char v25; // [sp+10h] [bp-4014h]@4
  __int16 v26; // [sp+Eh] [bp-4016h]@4

  v19 = (unsigned int)& s ^ dword_43901C;
  v20 = this;
  v21 = 1;
  v17 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  p->pkt.uin = atoi((const char *)v17);
  v23 = 3;
  if ( a16 )
    v24 = "Auth Resp OK!";
  else
    v24 = "Auth resp failed, reason: ";
  strcpy(&v25, v24);
  v26 = strlen(&v25);
  send_packet(v20, (char *)&p->pkt.uin);
  LOBYTE(v21) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v21 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
}

//----- (00417A70) --------------------------------------------------------
int __thiscall sub_417A70(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15)
{
  int v16; // eax@1
  int  s; // [sp+4020h] [bp+0h]@1
  unsigned int v18; // [sp+4010h] [bp-10h]@1
  int v19; // [sp+0h] [bp-4020h]@1
  signed int v20; // [sp+401Ch] [bp-4h]@1
  int p->pkt.uin; // [sp+4h] [bp-401Ch]@1
  __int16 v22; // [sp+8h] [bp-4018h]@1
  char v23; // [sp+Ch] [bp-4014h]@1
  __int16 v24; // [sp+Ah] [bp-4016h]@1

  v18 = (unsigned int)& s ^ dword_43901C;
  v19 = this;
  v20 = 1;
  v16 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  p->pkt.uin = atoi((const char *)v16);
  v22 = 3;
  strcpy(&v23, "Auth REQ: ");
  v24 = strlen(&v23);
  send_packet(v19, (char *)&p->pkt.uin);
  LOBYTE(v20) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v20 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
}

//----- (00417B50) --------------------------------------------------------
signed int __cdecl sub_417B50(signed int a1)
{
  if ( a1 == 168 )
    a1 = 1025;
  if ( a1 == 170 )
    a1 = 1028;
  if ( a1 == 175 )
    a1 = 1031;
  if ( a1 == 184 )
    a1 = 1105;
  if ( a1 == 186 )
    a1 = 1108;
  if ( a1 == 191 )
    a1 = 1111;
  if ( a1 == 178 )
    a1 = 1030;
  if ( a1 == 179 )
    a1 = 1110;
  if ( a1 >= 192 )
  {
    if ( a1 < 256 )
      a1 += 848;
  }
  return a1;
}

//----- (00417C00) --------------------------------------------------------
signed int __cdecl sub_417C00(unsigned int a1)
{
  signed int result; // eax@2
  _UNKNOWN *v2; // [sp+4h] [bp-4h]@1
  unsigned int v3; // [sp+0h] [bp-8h]@3

  v2 = &unk_433258;
  if ( a1 >= 0x80 )
  {
    while ( 1 )
    {
      v3 = *(_WORD *)v2;
      if ( !v3 )
        break;
      if ( a1 == v3 )
        return *((_BYTE *)v2 + 3);
      v2 = (char *)v2 + 6;
    }
    a1 = (unsigned __int8)a1;
    if ( (unsigned __int8)a1 >= 0x20u )
      result = a1;
    else
      result = 32;
  }
  else
  {
    result = a1;
  }
  return result;
}

//----- (00417C70) --------------------------------------------------------
__time64_t __cdecl gettime(__time64_t *Time)
{
  return time64(Time);
}

//----- (00417C90) --------------------------------------------------------
int __thiscall sub_417C90(int this, unsigned __int16 a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
  int v10; // eax@1
  int  s; // [sp+4020h] [bp+0h]@1
  unsigned int v12; // [sp+4010h] [bp-10h]@1
  int v13; // [sp+0h] [bp-4020h]@1
  signed int v14; // [sp+401Ch] [bp-4h]@1
  char v15; // [sp+Ch] [bp-4014h]@1
  __int16 v16; // [sp+Ah] [bp-4016h]@1
  __int16 v17; // [sp+8h] [bp-4018h]@1
  char p->pkt.uin; // [sp+4h] [bp-401Ch]@1

  v12 = (unsigned int)& s ^ dword_43901C;
  v13 = this;
  v14 = 0;
  v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a3);
  v16 = sprintf(&v15, "Error code %d, url: %s", a2, v10);
  v17 = 6;
  send_packet(v13, &p->pkt.uin);
  Sleep(0xBB8u);
  v14 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
}

//----- (00417D50) --------------------------------------------------------
int __thiscall send_server_ack(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
  int v10; // eax@1
  int  s; // [sp+4020h] [bp+0h]@1
  unsigned int v12; // [sp+4010h] [bp-10h]@1
  int v13; // [sp+0h] [bp-4020h]@1
  signed int v14; // [sp+401Ch] [bp-4h]@1
  int p->pkt.uin; // [sp+4h] [bp-401Ch]@1
  __int16 v16; // [sp+8h] [bp-4018h]@1
  __int16 v17; // [sp+Ah] [bp-4016h]@1
  char v18; // [sp+Ch] [bp-4014h]@1

  v12 = (unsigned int)& s ^ dword_43901C;
  v13 = this;
  v14 = 0;
  v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  p->pkt.uin = atoi((const char *)v10);
  v16 = 16;
  v17 = 2;
  memcpy(&v18, (const void *)(a9 + 4), 2u);
  send_packet(v13, (char *)&p->pkt.uin);
  v14 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00417E20) --------------------------------------------------------
int __thiscall send_client_ack(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
  int v10; // eax@1
  int  s; // [sp+4020h] [bp+0h]@1
  unsigned int v12; // [sp+4010h] [bp-10h]@1
  int v13; // [sp+0h] [bp-4020h]@1
  signed int v14; // [sp+401Ch] [bp-4h]@1
  int p->pkt.uin; // [sp+4h] [bp-401Ch]@1
  __int16 v16; // [sp+8h] [bp-4018h]@1
  __int16 v17; // [sp+Ah] [bp-4016h]@1
  char v18; // [sp+Ch] [bp-4014h]@1

  v12 = (unsigned int)& s ^ dword_43901C;
  v13 = this;
  v14 = 0;
  v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  p->pkt.uin = atoi((const char *)v10);
  v16 = 17;
  v17 = 2;
  memcpy(&v18, (const void *)(a9 + 4), 2u);
  send_packet(v13, (char *)&p->pkt.uin);
  v14 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00417EF0) --------------------------------------------------------
int __thiscall sub_417EF0(int this, char a2, _DWORD a3, _DWORD a4, _DWORD a5, _DWORD a6, _DWORD a7, _DWORD a8, _DWORD a9, char a10, char a11, char a12)
{
  int v13; // eax@1
  _DWORD  s; // [sp+4020h] [bp+0h]@1
  unsigned int v15; // [sp+4010h] [bp-10h]@1
  int v16; // [sp+0h] [bp-4020h]@1
  signed int v17; // [sp+401Ch] [bp-4h]@1
  int p->pkt.uin; // [sp+4h] [bp-401Ch]@1
  _WORD v19; // [sp+8h] [bp-4018h]@1
  _WORD v20; // [sp+Ah] [bp-4016h]@1
  _DWORD v21[4096]; // [sp+Ch] [bp-4014h]@2

  v15 = (unsigned int)& s ^ dword_43901C;
  v16 = this;
  v17 = 0;
  v13 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  p->pkt.uin = atoi((const char *)v13);
  v19 = 9;
  v20 = 3;
  if ( a11 )
    v21[0] = 256;
  else
    memcpy(v21, &a10, 2u);
  BYTE2(v21[0]) = a12;
  send_packet(v16, (char *)&p->pkt.uin);
  v17 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00417FD0) --------------------------------------------------------
signed int __cdecl sub_417FD0(int a1, signed int *a2)
{
  signed int result; // eax@1
  signed int v3; // [sp+0h] [bp-8h]@1
  signed int v4; // [sp+4h] [bp-4h]@1

  while ( 1 )
  {
    v3 = *(_BYTE *)a2;
    result = sub_417B50(v3);
    v4 = result;
    a2 = (signed int *)((char *)a2 + 1);
    if ( !result )
      break;
    if ( v4 < 128 )
    {
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a1, (unsigned __int8)v4);
    }
    else
    {
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a1, (v4 >> 6) | 0xC0);
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a1, v4 & 0x3F | 0x80);
    }
  }
  return result;
}

//----- (00418050) --------------------------------------------------------
int __cdecl sub_418050(int a1, int a2, int a3)
{
  int v4; // edx@12
  int v5; // [sp+4h] [bp-4h]@1
  unsigned int v6; // [sp+0h] [bp-8h]@2

  v5 = a1;
  while ( 1 )
  {
    v6 = *(_BYTE *)a2++;
    if ( !v6 )
      break;
    if ( (unsigned __int8)(v6 & 0xE0) == 192 )
    {
      if ( (unsigned __int8)(*(_BYTE *)a2 & 0xC0) == 128 )
      {
        v6 &= 0x1Fu;
        v6 <<= 6;
        v6 |= *(_BYTE *)a2++ & 0x3F;
      }
    }
    else
    {
      if ( (unsigned __int8)(v6 & 0xF0) == 224 )
      {
        if ( (unsigned __int8)(*(_BYTE *)a2 & 0xC0) != 128 || (unsigned __int8)(*(_BYTE *)(a2 + 1) & 0xC0) != 128 )
          return a1 - v5;
        v6 &= 0xFu;
        v6 <<= 12;
        v6 |= (*(_BYTE *)a2++ & 0x3F) << 6;
        v6 |= *(_BYTE *)a2++ & 0x3F;
      }
    }
    v4 = a3--;
    if ( v4 )
      *(_BYTE *)a1++ = sub_417C00(v6);
  }
  return a1 - v5;
}

//----- (004181A0) --------------------------------------------------------
int __thiscall sub_4181A0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16, char a17, int a18, int a19, int a20, int a21, int a22, int a23)
{
  int v24; // eax@1
  int v25; // eax@1
  int v26; // eax@1
  int v27; // eax@1
  int  s; // [sp+4024h] [bp+0h]@1
  unsigned int v29; // [sp+4014h] [bp-10h]@1
  int v30; // [sp+0h] [bp-4024h]@1
  signed int v31; // [sp+4020h] [bp-4h]@1
  _BYTE v32[16387]; // [sp+11h] [bp-4013h]@1
  int v33; // [sp+4h] [bp-4020h]@1
  char v34; // [sp+10h] [bp-4014h]@1
  __int16 v35; // [sp+Eh] [bp-4016h]@1
  int p->pkt.uin; // [sp+8h] [bp-401Ch]@1
  __int16 v37; // [sp+Ch] [bp-4018h]@1

  v29 = (unsigned int)& s ^ dword_43901C;
  v30 = this;
  v31 = 2;
  v24 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a10);
  v25 = sub_418050((int)v32, v24, 255);
  v33 = v25;
  v34 = v25;
  v26 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a17);
  v35 = (_WORD)v33 + (unsigned __int16)sub_418050((int)&v32[v33], v26, 16127) + 1;
  v27 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  p->pkt.uin = atoi((const char *)v27);
  v37 = 25;
  send_packet(v30, (char *)&p->pkt.uin);
  LOBYTE(v31) = 1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  LOBYTE(v31) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a10);
  v31 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a17);
}

//----- (004182C0) --------------------------------------------------------
int __userpurge sub_4182C0<eax>(int a1<ecx>, int a2<esi>, char a3, int a4, char a5, char a6, int a7, int a8, int a9, int a10, int a11, int a12, char a13, int a14, int a15, int a16, int a17, int a18, int a19, int a20, int a21, unsigned int a22, int a23, int a24, int a25, int a26)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  char ST0C_1_0; // ST0C_1@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int v33; // ST0C_4@1
  int v34; // ST10_4@1
  int v35; // ST14_4@1
  int v36; // ST18_4@1
  int v37; // ST1C_4@1
  int v38; // ST0C_4@2
  int v39; // ST10_4@2
  int v40; // ST14_4@2
  int v41; // ST18_4@2
  int v42; // ST1C_4@2
  int v43; // ST20_4@2
  int v44; // ST24_4@2
  int v46; // ST20_4@1
  signed int v47; // eax@1
  char v48; // al@2
  int v49; // eax@3
  int v50; // eax@3
  size_t v51; // ST24_4@3
  int v52; // eax@3
  int v53; // eax@7
  int v54; // edx@7
  int v55; // eax@7
  size_t v56; // ST24_4@7
  int v57; // eax@8
  int v58; // edx@8
  int v59; // eax@8
  size_t v60; // ST24_4@8
  int v61; // esi@11
  int v62; // eax@11
  int v63; // eax@13
  int v64; // eax@14
  int  s; // [sp+44E8h] [bp+0h]@1
  unsigned int v66; // [sp+44D8h] [bp-10h]@1
  int v67; // [sp+18h] [bp-44D0h]@1
  signed int v68; // [sp+44E4h] [bp-4h]@1
  char *v69; // [sp+24h] [bp-44C4h]@1
  int v70; // [sp+14h] [bp-44D4h]@1
  signed int v71; // [sp+10h] [bp-44D8h]@1
  char *v72; // [sp+20h] [bp-44C8h]@2
  int v73; // [sp+Ch] [bp-44DCh]@2
  char v74; // [sp+2Ch] [bp-44BCh]@2
  char v75; // [sp+Bh] [bp-44DDh]@2
  char *v76; // [sp+1Ch] [bp-44CCh]@3
  int v77; // [sp+4h] [bp-44E4h]@3
  int p->pkt.uin; // [sp+4CCh] [bp-401Ch]@3
  char v79; // [sp+48h] [bp-44A0h]@3
  size_t v80; // [sp+4C8h] [bp-4020h]@3
  __int16 v81; // [sp+4D2h] [bp-4016h]@3
  _BYTE v82[16388]; // [sp+4D4h] [bp-4014h]@3
  __int16 v83; // [sp+4D0h] [bp-4018h]@3
  unsigned int v84; // [sp+0h] [bp-44E8h]@5
  unsigned int v85; // [sp+4C4h] [bp-4024h]@9
  unsigned int v86; // [sp+28h] [bp-44C0h]@9

  v66 = (unsigned int)& s ^ dword_43901C;
  v46 = (unsigned int)& s ^ dword_43901C;
  v67 = a1;
  v68 = 0;
  v69 = &ST04_1_0;
  v70 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a6);
  v47 = sub_41ACD0(v67, ST0C_1_0, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, v46, a2);
  v71 = v47;
  if ( v47 < 0 )
  {
    sub_4065D0();
    LOBYTE(v68) = 1;
    v72 = &ST04_1_0;
    v73 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a6);
    v48 = sub_426480(v67, ST04_1_0, ST08_4_0, v33, v34, v35, v36, v37, (int)&v74, 1u);
    v75 = v48;
    if ( v48 )
    {
      v76 = &ST0C_1_0;
      v77 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a6);
      sub_421EB0(v67, v38, v39, v40, v41, v42, v43, v44);
      v49 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a6);
      p->pkt.uin = atoi((const char *)v49);
      v50 = std__basic_string_char_std__char_traits_char__std__allocator_char____size(&v79);
      v80 = v50;
      v81 = v50;
      v51 = v50;
      v52 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v79);
      memcpy(v82, (const void *)v52, v51);
      v83 = 7;
      send_packet(v67, (char *)&p->pkt.uin);
    }
    LOBYTE(v68) = 0;
    sub_4096A0((int)&v74);
  }
  v84 = a22;
  if ( a22 <= 3 )
  {
    switch ( v84 )
    {
      case 0u:
        v53 = std__basic_string_char_std__char_traits_char__std__allocator_char____size(&a13);
        v80 = v53;
        v84 = v53;
        v55 = std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(&a13, v54, 0);
        memcpy(v82, (const void *)v55, v56);
        v81 = v80;
        break;
      case 1u:
        v57 = std__basic_string_char_std__char_traits_char__std__allocator_char____size(&a13);
        v80 = v57;
        v84 = v57;
        v59 = std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(&a13, v58, 0);
        memcpy(v82, (const void *)v59, v60);
        v81 = v80;
        break;
      case 2u:
        v85 = (unsigned int)std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a13) >> 1;
        v86 = 0;
        while ( v86 < v85 )
        {
          v61 = *(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(
                            &a13,
                            v86,
                            2 * v86 + 1);
          v62 = std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(&a13, 2 * v86, 2 * v86);
          v82[v86++] = sub_417C00((*(_BYTE *)v62 << 8) + v61);
        }
        v81 = v85;
        break;
      case 3u:
        v63 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a13);
        v81 = sub_418050((int)v82, v63, 16383);
        break;
    }
  }
  v83 = 3;
  v64 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a6);
  p->pkt.uin = atoi((const char *)v64);
  send_packet(v67, (char *)&p->pkt.uin);
  if ( a5 )
  {
    if ( *(_DWORD *)(v67 + 804) == 32 )
    {
      memcpy((void *)(v67 + 808), (const void *)(v67 + 824), 0x1F0u);
      --*(_DWORD *)(v67 + 804);
    }
    *(_DWORD *)(v67 + 16 * *(_DWORD *)(v67 + 804) + 808) = *(_DWORD *)(v67 + 796);
    *(_DWORD *)(v67 + 16 * *(_DWORD *)(v67 + 804) + 812) = p->pkt.uin;
    memcpy((void *)(v67 + 16 * *(_DWORD *)(v67 + 804)++ + 816), &a3, 8u);
  }
  v68 = -1;
  return sub_4070B0((int)&a3);
}

//----- (00418700) --------------------------------------------------------
int __stdcall handle_connection(SOCKET *a1)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  char ST10_1_0; // ST10_1@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  int ST3C_4_0; // ST3C_4@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  char ST4C_1_0; // ST4C_1@0
  int ST50_4_0; // ST50_4@0
  int ST54_4_0; // ST54_4@0
  int ST58_4_0; // ST58_4@0
  int ST6C_4_0; // ST6C_4@0
  int ST70_4_0; // ST70_4@0
  int ST74_4_0; // ST74_4@0
  int ST78_4_0; // ST78_4@0
  int ST7C_4_0; // ST7C_4@0
  unsigned int v27; // ST68_4@1
  int v28; // ST5C_4@2
  int v29; // ST60_4@2
  int v30; // ST64_4@2
  int v31; // ST48_4@9
  int v32; // ST4C_4@9
  int v33; // ST50_4@9
  int v34; // ST54_4@9
  int v35; // ST58_4@9
  int v36; // ST5C_4@29
  int v37; // ST60_4@29
  int v38; // ST64_4@35
  int v39; // ST50_4@43
  int v40; // ST54_4@43
  int v41; // ST60_4@80
  int v45; // ST5C_4@83
  int v46; // ST60_4@83
  int v47; // ST64_4@83
  int v48; // ST5C_4@84
  int v49; // ST60_4@84
  int v50; // ST64_4@84
  int v51; // ST60_4@91
  int v52; // ST50_4@96
  int v53; // ST54_4@96
  int v54; // ST58_4@96
  int v55; // ST5C_4@96
  int v56; // ST60_4@96
  int v57; // ST64_4@96
  int v58; // ST5C_4@97
  int v59; // ST60_4@97
  int v60; // ST64_4@97
  int v62; // ST5C_4@9
  int v63; // ST60_4@9
  int v64; // ST64_4@9
  int v65; // eax@17
  int v66; // eax@17
  int v67; // eax@22
  int v68; // eax@22
  int v69; // eax@22
  int v70; // eax@22
  signed int v71; // eax@26
  signed int v72; // eax@29
  __time64_t v73; // qax@32
  int v75; // ST5C_4@43
  int v76; // ST60_4@43
  int v77; // ST64_4@43
  signed int v78; // eax@43
  int v79; // eax@47
  int v80; // ST38_4@47
  int v81; // eax@47
  int v82; // ST5C_4@47
  int v83; // ST60_4@47
  char v84; // al@47
  char v85; // ST64_1@50
  int v86; // eax@50
  int v87; // eax@50
  int v88; // ST5C_4@50
  int v89; // ST60_4@50
  char v90; // al@50
  char v91; // ST64_1@53
  int v92; // eax@53
  int v93; // eax@53
  int v94; // ST5C_4@53
  int v95; // ST60_4@53
  void *v96; // ST60_4@58
  int v97; // ST5C_4@58
  int v98; // ST64_4@61
  int v99; // ST5C_4@61
  int v100; // ST60_4@61
  int v101; // eax@63
  int v102; // ST5C_4@69
  int v103; // ST64_4@76
  int v104; // ST60_4@76
  char *v105; // ST5C_4@76
  int v106; // ST58_4@76
  int v107; // ST54_4@76
  int v108; // ST50_4@76
  int v109; // eax@76
  int v110; // ST64_4@77
  int v111; // eax@77
  int v112; // ST5C_4@77
  int v113; // ST60_4@77
  int v114; // eax@78
  int v115; // ST5C_4@78
  int v116; // ST60_4@78
  signed int *v117; // ST6C_4@79
  int v118; // eax@79
  int v119; // ST68_4@81
  int v120; // ST68_4@83
  signed int v121; // eax@83
  int v122; // eax@84
  int v123; // eax@84
  int v124; // eax@85
  signed int v125; // eax@87
  int v126; // eax@89
  signed int v127; // eax@91
  int v128; // ST68_4@92
  int v129; // ST68_4@94
  int v130; // ST68_4@96
  signed int v131; // eax@96
  int v132; // eax@97
  int v133; // eax@97
  int v134; // eax@98
  int v135; // eax@98
  signed int v136; // eax@100
  int v137; // eax@102
  int v138; // ST5C_4@104
  int v139; // ST60_4@104
  int v140; // ST64_4@114
  char *v141; // eax@114
  int  s; // [sp+4EB8h] [bp+0h]@1
  unsigned int v143; // [sp+4EA8h] [bp-10h]@1
  SOCKET *v144; // [sp+918h] [bp-45A0h]@1
  SOCKET s; // [sp+E94h] [bp-4024h]@1
  __int16 v146; // [sp+920h] [bp-4598h]@1
  char miif; // [sp+92Ch] [bp-458Ch]@1
  signed int v148; // [sp+4EB4h] [bp-4h]@1
  unsigned __int8 forbid_this_client; // [sp+E54h] [bp-4064h]@1
  SOCKET v150; // [sp+C4Ch] [bp-426Ch]@1
  int p->pkt.uin; // [sp+E9Ch] [bp-401Ch]@2
  unsigned __int16 p->pkt.type; // [sp+EA0h] [bp-4018h]@4
  _BYTE p->data[4]; // [sp+EA4h] [bp-4014h]@5
  __int16 p->pkt.data_len; // [sp+EA2h] [bp-4016h]@5
  char v155; // [sp+EACh] [bp-400Ch]@5
  char v156; // [sp+A50h] [bp-4468h]@5
  char v157; // [sp+EA8h] [bp-4010h]@6
  char *v158; // [sp+2F4h] [bp-4BC4h]@9
  int v159; // [sp+120h] [bp-4D98h]@9
  char *v160; // [sp+2F0h] [bp-4BC8h]@9
  int v161; // [sp+11Ch] [bp-4D9Ch]@9
  int v162; // [sp+C48h] [bp-4270h]@9
  int total_sent; // [sp+C44h] [bp-4274h]@9
  int v164; // [sp+C50h] [bp-4268h]@9
  int v165; // [sp+AC8h] [bp-43F0h]@10
  int data_arrived; // [sp+E98h] [bp-4020h]@11
  int v167; // [sp+914h] [bp-45A4h]@11
  char v168; // [sp+94Ch] [bp-456Ch]@16
  char v169; // [sp+934h] [bp-4584h]@19
  __int64 activity_time; // [sp+924h] [bp-4594h]@25
  signed int v171; // [sp+910h] [bp-45A8h]@26
  __time64_t v172; // [sp+114h] [bp-4DA4h]@32
  int v173; // [sp+110h] [bp-4DA8h]@36
  int v174; // [sp+10Ch] [bp-4DACh]@40
  char v175; // [sp+8ECh] [bp-45CCh]@43
  char *v176; // [sp+2ECh] [bp-4BCCh]@43
  int v177; // [sp+108h] [bp-4DB0h]@43
  signed int v178; // [sp+104h] [bp-4DB4h]@43
  unsigned int v179; // [sp+90Ch] [bp-45ACh]@43
  int v180; // [sp+8D0h] [bp-45E8h]@47
  int v181; // [sp+0h] [bp-4EB8h]@47
  int *v182; // [sp+280h] [bp-4C38h]@47
  int v183; // [sp+100h] [bp-4DB8h]@47
  int v184; // [sp+FCh] [bp-4DBCh]@47
  int *v185; // [sp+27Ch] [bp-4C3Ch]@47
  int v186; // [sp+F8h] [bp-4DC0h]@47
  char v187; // [sp+284h] [bp-4C34h]@47
  int v188; // [sp+F4h] [bp-4DC4h]@47
  int v189; // [sp+F0h] [bp-4DC8h]@47
  char *v190; // [sp+2E4h] [bp-4BD4h]@47
  int v191; // [sp+ECh] [bp-4DCCh]@47
  char v192; // [sp+EBh] [bp-4DCDh]@47
  unsigned __int8 v193; // [sp+2EBh] [bp-4BCDh]@47
  int *v194; // [sp+210h] [bp-4CA8h]@50
  int v195; // [sp+E4h] [bp-4DD4h]@50
  int v196; // [sp+E0h] [bp-4DD8h]@50
  int *v197; // [sp+20Ch] [bp-4CACh]@50
  int v198; // [sp+DCh] [bp-4DDCh]@50
  char v199; // [sp+214h] [bp-4CA4h]@50
  int v200; // [sp+D8h] [bp-4DE0h]@50
  int v201; // [sp+D4h] [bp-4DE4h]@50
  char *v202; // [sp+274h] [bp-4C44h]@50
  int v203; // [sp+D0h] [bp-4DE8h]@50
  char v204; // [sp+CFh] [bp-4DE9h]@50
  unsigned __int8 v205; // [sp+27Bh] [bp-4C3Dh]@50
  int *v206; // [sp+1A0h] [bp-4D18h]@53
  int v207; // [sp+C8h] [bp-4DF0h]@53
  int v208; // [sp+C4h] [bp-4DF4h]@53
  int *v209; // [sp+19Ch] [bp-4D1Ch]@53
  int v210; // [sp+C0h] [bp-4DF8h]@53
  char v211; // [sp+1A4h] [bp-4D14h]@53
  int v212; // [sp+BCh] [bp-4DFCh]@53
  int v213; // [sp+B8h] [bp-4E00h]@53
  char *v214; // [sp+208h] [bp-4CB0h]@53
  int v215; // [sp+B4h] [bp-4E04h]@53
  int v216; // [sp+C54h] [bp-4264h]@57
  int v217; // [sp+C58h] [bp-4260h]@58
  _BYTE v218[8]; // [sp+C5Ch] [bp-425Ch]@58
  int *v219; // [sp+198h] [bp-4D20h]@58
  int v220; // [sp+B0h] [bp-4E08h]@58
  _BYTE v221[496]; // [sp+C64h] [bp-4254h]@58
  char *v222; // [sp+194h] [bp-4D24h]@61
  int v223; // [sp+ACh] [bp-4E0Ch]@61
  char *v224; // [sp+190h] [bp-4D28h]@63
  char v225; // [sp+AACh] [bp-440Ch]@63
  int v226; // [sp+A8h] [bp-4E10h]@63
  int v227; // [sp+A4h] [bp-4E14h]@63
  int *v228; // [sp+18Ch] [bp-4D2Ch]@63
  char v229; // [sp+A90h] [bp-4428h]@63
  int v230; // [sp+A0h] [bp-4E18h]@63
  int *v231; // [sp+188h] [bp-4D30h]@69
  int v232; // [sp+9Ch] [bp-4E1Ch]@69
  char v233; // [sp+434h] [bp-4A84h]@69
  unsigned __int8 v234; // [sp+58Eh] [bp-492Ah]@69
  char *v235; // [sp+98h] [bp-4E20h]@71
  char *v236; // [sp+94h] [bp-4E24h]@73
  char v237; // [sp+74Ch] [bp-476Ch]@76
  char v238; // [sp+4C0h] [bp-49F8h]@76
  unsigned __int16 v239; // [sp+58Ch] [bp-492Ch]@76
  char v240; // [sp+488h] [bp-4A30h]@76
  char v241; // [sp+46Ch] [bp-4A4Ch]@76
  char v242; // [sp+450h] [bp-4A68h]@76
  char v243; // [sp+414h] [bp-4AA4h]@77
  char *v244; // [sp+184h] [bp-4D34h]@77
  int v245; // [sp+90h] [bp-4E28h]@77
  int v246; // [sp+8Ch] [bp-4E2Ch]@77
  int *v247; // [sp+180h] [bp-4D38h]@77
  int v248; // [sp+88h] [bp-4E30h]@77
  char v249; // [sp+3F4h] [bp-4AC4h]@78
  int *v250; // [sp+17Ch] [bp-4D3Ch]@78
  int v251; // [sp+84h] [bp-4E34h]@78
  int v252; // [sp+80h] [bp-4E38h]@78
  int *v253; // [sp+178h] [bp-4D40h]@78
  int v254; // [sp+7Ch] [bp-4E3Ch]@78
  char v255; // [sp+3BCh] [bp-4AFCh]@79
  char v256; // [sp+3D8h] [bp-4AE0h]@79
  int *v257; // [sp+174h] [bp-4D44h]@79
  int v258; // [sp+78h] [bp-4E40h]@79
  int v259; // [sp+74h] [bp-4E44h]@79
  int *v260; // [sp+170h] [bp-4D48h]@79
  int v261; // [sp+70h] [bp-4E48h]@79
  int v262; // [sp+A8Ch] [bp-442Ch]@79
  char v263; // [sp+3A0h] [bp-4B18h]@80
  char v264; // [sp+364h] [bp-4B54h]@80
  __int16 v265; // [sp+360h] [bp-4B58h]@80
  char v266; // [sp+380h] [bp-4B38h]@80
  int *v267; // [sp+16Ch] [bp-4D4Ch]@83
  int v268; // [sp+6Ch] [bp-4E4Ch]@83
  signed int v269; // [sp+68h] [bp-4E50h]@83
  char *v270; // [sp+168h] [bp-4D50h]@84
  int v271; // [sp+64h] [bp-4E54h]@84
  int v272; // [sp+60h] [bp-4E58h]@84
  int *v273; // [sp+164h] [bp-4D54h]@84
  int v274; // [sp+5Ch] [bp-4E5Ch]@84
  int v275; // [sp+58h] [bp-4E60h]@84
  int *v276; // [sp+160h] [bp-4D58h]@84
  int v277; // [sp+54h] [bp-4E64h]@84
  char *v278; // [sp+15Ch] [bp-4D5Ch]@85
  int v279; // [sp+50h] [bp-4E68h]@85
  int v280; // [sp+4Ch] [bp-4E6Ch]@85
  int *v281; // [sp+158h] [bp-4D60h]@85
  int v282; // [sp+48h] [bp-4E70h]@85
  char *v283; // [sp+154h] [bp-4D64h]@87
  int v284; // [sp+44h] [bp-4E74h]@87
  signed int v285; // [sp+40h] [bp-4E78h]@87
  unsigned int v286; // [sp+35Ch] [bp-4B5Ch]@87
  char v287; // [sp+33Ch] [bp-4B7Ch]@91
  char v288; // [sp+300h] [bp-4BB8h]@91
  __int16 v289; // [sp+2FCh] [bp-4BBCh]@91
  char v290; // [sp+31Ch] [bp-4B9Ch]@91
  unsigned int v291; // [sp+358h] [bp-4B60h]@91
  int *v292; // [sp+150h] [bp-4D68h]@96
  int v293; // [sp+3Ch] [bp-4E7Ch]@96
  signed int v294; // [sp+38h] [bp-4E80h]@96
  char *v295; // [sp+14Ch] [bp-4D6Ch]@97
  int v296; // [sp+34h] [bp-4E84h]@97
  int v297; // [sp+30h] [bp-4E88h]@97
  int *v298; // [sp+148h] [bp-4D70h]@97
  int v299; // [sp+2Ch] [bp-4E8Ch]@97
  int v300; // [sp+28h] [bp-4E90h]@97
  int *v301; // [sp+144h] [bp-4D74h]@97
  int v302; // [sp+24h] [bp-4E94h]@97
  char *v303; // [sp+140h] [bp-4D78h]@98
  int v304; // [sp+20h] [bp-4E98h]@98
  int *v305; // [sp+13Ch] [bp-4D7Ch]@98
  int v306; // [sp+1Ch] [bp-4E9Ch]@98
  int v307; // [sp+18h] [bp-4EA0h]@98
  int *v308; // [sp+138h] [bp-4D80h]@98
  int v309; // [sp+14h] [bp-4EA4h]@98
  int v310; // [sp+10h] [bp-4EA8h]@98
  int *v311; // [sp+134h] [bp-4D84h]@98
  int v312; // [sp+Ch] [bp-4EACh]@98
  char *v313; // [sp+130h] [bp-4D88h]@100
  int v314; // [sp+8h] [bp-4EB0h]@100
  signed int v315; // [sp+4h] [bp-4EB4h]@100
  unsigned int v316; // [sp+2F8h] [bp-4BC0h]@100
  char v317; // [sp+E74h] [bp-4044h]@104
  int *v318; // [sp+12Ch] [bp-4D8Ch]@104
  int v319; // [sp+91Ch] [bp-459Ch]@114
  void *v320; // [sp+128h] [bp-4D90h]@114
  int v321; // [sp+124h] [bp-4D94h]@114

  v143 = (unsigned int)& s ^ dword_43901C;
  v27 = (unsigned int)& s ^ dword_43901C;
  v144 = a1;
  s = *a1;
  v146 = 0;
  sub_415690((int)&miif);
  v148 = 0;
  forbid_this_client = 0;
  v150 = s;
  
  while ( recv_packet(s, (char *)&p->pkt.uin, 60) > 0 )
  {
    if ( p->pkt.type == 32 )
    {
      p->data[p->pkt.data_len] = 0;
      v155 = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v156, p->data);
      if ( strstr_my(p->data, forbid_mod) || !strcmp(&v157, forbid_build_2058) )
        forbid_this_client = 1;
    }
    if ( p->pkt.type == 1 )
    {
      p->data[p->pkt.data_len] = 0;
      v158 = &ST4C_1_0;
      v159 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST4C_1_0);
      sub_406AE0((int)&miif, ST4C_1_0, ST50_4_0, ST54_4_0, ST58_4_0, v28, v29, v30);
      sprintf(p->data, "%u", p->pkt.uin);
      v160 = &ST4C_1_0;
      v31 = (int)p->data;
      v161 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST4C_1_0);
      sub_406A70((int)&miif, v32, v33, v34, v35, v62, v63, v64);
      *(v144 + 1) = p->pkt.uin;
      printf("\nICQ UIN is %u", *(v144 + 1));
      setNetworkTimeout((int)&miif, 400);
      v162 = 0;
      total_sent = 0;
      v164 = 0;
      if ( sub_4276F0((int)&miif, 0) )
      {
        p->pkt.data_len = 0;
        p->pkt.type = 4;
        send_packet((int)&miif, (char *)&p->pkt.uin);
        data_arrived = 0;
        v167 = (unsigned __int8)sub_415610((int)&miif);
        do
        {
          if ( v167 == byte_432650[data_arrived] )
            break;
          ++data_arrived;
        }
        while ( data_arrived < 5 );
        p->data[0] = data_arrived;
        p->pkt.data_len = 1;
        p->pkt.type = 31;
        send_packet((int)&miif, (char *)&p->pkt.uin);
        data_arrived = 0;
        while ( data_arrived < sub_408830((int)&v168) )
        {
          p->pkt.uin = *(_WORD *)sub_408850((int)&v168, data_arrived);
          v65 = sub_408850((int)&v168, data_arrived);
          v66 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(v65 + 4);
          p->pkt.data_len = sub_418050((int)p->data, v66, 16383);
          p->pkt.type = 20;
          send_packet((int)&miif, (char *)&p->pkt.uin);
          ++data_arrived;
        }
        v167 = -1;
        data_arrived = 0;
        while ( data_arrived < sub_4085B0((int)&v169) )
        {
          if ( *(_WORD *)(sub_4085D0((int)&v169, data_arrived) + 56) != v167 )
          {
            v167 = *(_WORD *)(sub_4085D0((int)&v169, data_arrived) + 56);
            p->pkt.uin = v167;
            p->pkt.data_len = 0;
            p->pkt.type = 21;
            send_packet((int)&miif, (char *)&p->pkt.uin);
          }
          v67 = sub_4085D0((int)&v169, data_arrived);
          v68 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(v67);
          p->pkt.uin = atoi((const char *)v68);
          v69 = sub_4085D0((int)&v169, data_arrived);
          v70 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(v69 + 28);
          p->pkt.data_len = sub_418050((int)p->data, v70, 16383);
          p->pkt.type = 7;
          send_packet((int)&miif, (char *)&p->pkt.uin);
          ++data_arrived;
        }
        p->pkt.uin = 0;
        p->pkt.data_len = 0;
        p->pkt.type = 7;
        send_packet((int)&miif, (char *)&p->pkt.uin);
        if ( sub_421810((int)&miif) )
        {
          activity_time = gettime(0) + 300;
LABEL_26:
          while ( 1 )
          {
            v71 = pollIncomingEvents((int)&miif, 1);
            v171 = v71;
            if ( v71 != -2 )
            {
              if ( v171 != 1 )
                break;
            }
            v72 = recv_packet(s, p, 0);
            data_arrived = v72;
            if ( v72 < 0 )
              goto LABEL_113;
            if ( data_arrived )
            {
              activity_time = gettime(0) + 300;
              if ( !forbid_this_client )
                goto LABEL_117;
              v173 = rand();
              __asm
              {
                fild    [ebp+var_4DA8]
                fcomp   ds:dbl_433530
                fnstsw  ax
              }
              if ( HIBYTE(_AX) & 0x41 )
              {
LABEL_117:
                v174 = p->pkt.type;
                if ( p->pkt.type > 0x21u )
                {
LABEL_111:
                  p->pkt.data_len = sprintf(p->data, "Unknown opcode %u", p->pkt.type);
                  p->pkt.type = 6;
                  send_packet((int)&miif, (char *)&p->pkt.uin);
                }
                else
                {
                  switch ( v174 )
                  {
                    case 0:
                      continue;
                    case 2:
                      sprintf(&v175, "%u", p->pkt.uin);
                      v176 = &ST4C_1_0;
                      v31 = (int)&v175;
                      v177 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST4C_1_0);
                      v78 = sub_41ACD0((int)&miif, v32, v33, v34, v35, v75, v76, v77);
                      v178 = v78;
                      v179 = v78;
                      p->data[p->pkt.data_len] = 0;
                      total_sent = ((_WORD)total_sent + 1) & 0x7FFF;
                      if ( (signed int)v179 < 0
                        || !*(_BYTE *)(sub_4085D0((int)&v169, v179) + 225)
                        || *(_DWORD *)(sub_4085D0((int)&v169, v179) + 152) == -1 )
                        goto LABEL_53;
                      if ( *(_BYTE *)(sub_4085D0((int)&v169, v179) + 226) )
                      {
                        std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                          &v180,
                          v27,
                          ST6C_4_0,
                          ST70_4_0,
                          ST74_4_0);
                        LOBYTE(v148) = 1;
                        v181 = (int)p->data;
                        sub_417FD0((int)&v180, (signed int *)ST6C_4_0);
                        v181 = (unsigned __int16)total_sent;
                        v27 = 0;
                        v182 = &ST3C_4_0;
                        v79 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v180);
                        v183 = v79;
                        v184 = v79;
                        LOBYTE(v148) = 2;
                        v185 = &ST1C_4_0;
                        v186 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST1C_4_0);
                        LOBYTE(v148) = 1;
                        v81 = sub_406D30(
                                (int)&v187,
                                (char)&v175,
                                ST1C_4_0,
                                ST20_4_0,
                                ST24_4_0,
                                ST28_4_0,
                                ST2C_4_0,
                                ST30_4_0,
                                ST34_4_0,
                                v80,
                                ST3C_4_0,
                                ST40_4_0,
                                ST44_4_0,
                                (int)&v175,
                                v32,
                                v39,
                                v40,
                                3,
                                0,
                                0);
                        v188 = v81;
                        v189 = v81;
                        LOBYTE(v148) = 3;
                        v190 = &ST04_1_0;
                        v191 = sub_407FF0((int)&ST04_1_0, v81);
                        v84 = sub_4265F0(
                                (int)&miif,
                                ST04_1_0,
                                ST08_4_0,
                                ST0C_4_0,
                                ST10_1_0,
                                ST14_4_0,
                                ST18_4_0,
                                ST1C_4_0,
                                ST20_4_0,
                                ST24_4_0,
                                ST28_4_0,
                                ST2C_4_0,
                                ST30_4_0,
                                ST34_4_0,
                                ST38_4_0,
                                ST3C_4_0,
                                ST40_4_0,
                                ST44_4_0,
                                v31,
                                v32,
                                v33,
                                v34,
                                v35,
                                v82,
                                v83,
                                0);
                        v192 = v84;
                        v193 = (unsigned __int8)v84 == 0;
                        LOBYTE(v148) = 1;
                        sub_4070B0((int)&v187);
                        if ( !v193 )
                        {
                          LOBYTE(v148) = 0;
                          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v180);
                          continue;
                        }
                        LOBYTE(v148) = 0;
                        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v180);
                      }
                      else
                      {
                        v85 = total_sent;
                        v194 = &ST34_4_0;
                        v86 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST34_4_0);
                        v195 = v86;
                        v196 = v86;
                        LOBYTE(v148) = 4;
                        v197 = &ST1C_4_0;
                        v198 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST1C_4_0);
                        LOBYTE(v148) = 0;
                        v87 = sub_406D30(
                                (int)&v199,
                                (char)&v175,
                                ST1C_4_0,
                                ST20_4_0,
                                ST24_4_0,
                                ST28_4_0,
                                ST2C_4_0,
                                (int)p->data,
                                ST34_4_0,
                                ST38_4_0,
                                ST3C_4_0,
                                ST40_4_0,
                                ST44_4_0,
                                (int)&v175,
                                v32,
                                3,
                                0,
                                0,
                                0,
                                0);
                        v200 = v87;
                        v201 = v87;
                        LOBYTE(v148) = 5;
                        v202 = &ST04_1_0;
                        v203 = sub_407FF0((int)&ST04_1_0, v87);
                        v90 = sub_4265F0(
                                (int)&miif,
                                ST04_1_0,
                                ST08_4_0,
                                ST0C_4_0,
                                ST10_1_0,
                                ST14_4_0,
                                ST18_4_0,
                                ST1C_4_0,
                                ST20_4_0,
                                ST24_4_0,
                                ST28_4_0,
                                ST2C_4_0,
                                ST30_4_0,
                                ST34_4_0,
                                ST38_4_0,
                                ST3C_4_0,
                                ST40_4_0,
                                ST44_4_0,
                                v31,
                                v32,
                                v33,
                                v34,
                                v35,
                                v88,
                                v89,
                                v85);
                        v204 = v90;
                        v205 = (unsigned __int8)v90 == 0;
                        LOBYTE(v148) = 0;
                        sub_4070B0((int)&v199);
                        if ( !v205 )
                          continue;
                      }
LABEL_53:
                      v91 = total_sent;
                      v206 = &ST34_4_0;
                      v92 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST34_4_0);
                      v207 = v92;
                      v208 = v92;
                      LOBYTE(v148) = 6;
                      v209 = &ST1C_4_0;
                      v210 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST1C_4_0);
                      LOBYTE(v148) = 0;
                      v93 = sub_406D30(
                              (int)&v211,
                              (char)&v175,
                              ST1C_4_0,
                              ST20_4_0,
                              ST24_4_0,
                              ST28_4_0,
                              ST2C_4_0,
                              (int)p->data,
                              ST34_4_0,
                              ST38_4_0,
                              ST3C_4_0,
                              ST40_4_0,
                              ST44_4_0,
                              v31,
                              v32,
                              1,
                              0,
                              0,
                              0,
                              0);
                      v212 = v93;
                      v213 = v93;
                      LOBYTE(v148) = 7;
                      v214 = &ST04_1_0;
                      v215 = sub_407FF0((int)&ST04_1_0, v93);
                      sub_4265F0(
                        (int)&miif,
                        ST04_1_0,
                        ST08_4_0,
                        ST0C_4_0,
                        ST10_1_0,
                        ST14_4_0,
                        ST18_4_0,
                        ST1C_4_0,
                        ST20_4_0,
                        ST24_4_0,
                        ST28_4_0,
                        ST2C_4_0,
                        ST30_4_0,
                        ST34_4_0,
                        ST38_4_0,
                        ST3C_4_0,
                        ST40_4_0,
                        ST44_4_0,
                        v31,
                        v32,
                        v33,
                        v34,
                        v35,
                        v94,
                        v95,
                        v91);
                      LOBYTE(v148) = 0;
                      sub_4070B0((int)&v211);
                      continue;
                    case 10:
                      p->data[p->pkt.data_len] = 0;
                      v110 = p->pkt.uin;
                      sprintf(&v243, "%u");
                      v244 = &ST4C_1_0;
                      v111 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST4C_1_0);
                      v245 = v111;
                      v246 = v111;
                      LOBYTE(v148) = 10;
                      v247 = &ST34_4_0;
                      v248 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST34_4_0);
                      LOBYTE(v148) = 0;
                      sub_4213C0(
                        (int)&miif,
                        (char)&v243,
                        ST34_4_0,
                        ST38_4_0,
                        ST3C_4_0,
                        ST40_4_0,
                        ST44_4_0,
                        (int)&unk_432302,
                        v32,
                        v33,
                        v34,
                        v35,
                        v112,
                        v113,
                        v110);
                      continue;
                    case 11:
                      sub_4065D0();
                      LOBYTE(v148) = 9;
                      sprintf(p->data, "%u", p->pkt.uin);
                      v231 = &ST44_4_0;
                      v232 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST44_4_0);
                      sub_426480((int)&miif, ST44_4_0, v31, v32, v33, v34, v35, v102, (int)&v233, 1u);
                      if ( v234 == 1 || v234 == 2 )
                      {
                        if ( v234 == 2 )
                          v236 = "Male";
                        else
                          v236 = "Female";
                        v235 = v236;
                      }
                      else
                      {
                        v235 = "Unknown";
                      }
                      v103 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v237);
                      v104 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v238);
                      v105 = v235;
                      v106 = v239;
                      v107 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v240);
                      v108 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v241);
                      v109 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v242);
                      p->pkt.data_len = snprintf(
                               p->data,
                               0x3FFFu,
                               "Nick: %s\r\nFirstname: %s\r\nLastname: %s\r\nAge: %d\r\nGender: %s\r\nHomecity: %s\r\nNotes: %s\r\n",
                               v109,
                               v33,
                               v34,
                               v35,
                               v105,
                               v104,
                               v103);
                      p->pkt.type = 3;
                      send_packet((int)&miif, (char *)&p->pkt.uin);
                      LOBYTE(v148) = 0;
                      sub_4096A0((int)&v233);
                      continue;
                    case 12:
                      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                        &v263,
                        v27,
                        ST6C_4_0,
                        ST70_4_0,
                        ST74_4_0);
                      LOBYTE(v148) = 15;
                      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                        &v264,
                        ST6C_4_0,
                        ST70_4_0,
                        ST74_4_0,
                        ST78_4_0);
                      LOBYTE(v148) = 16;
                      v265 = 0;
                      p->data[p->pkt.data_len] = 0;
                      sprintf(&v266, "%u", p->pkt.uin);
                      if ( sub_408830((int)&v168) )
                      {
                        v119 = sub_408850((int)&v168, 0) + 4;
                        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v263);
                      }
                      else
                      {
                        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                          &v263,
                          &unk_432316);
                      }
                      sub_417FD0((int)&v264, (signed int *)p->data);
                      v267 = &ST50_4_0;
                      v268 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST50_4_0);
                      v121 = sub_41ACD0((int)&miif, v33, v34, v35, v36, v41, v47, v120);
                      v269 = v121;
                      if ( v121 >= 0 )
                      {
                        v27 = (unsigned int)&v265;
                        v278 = &ST4C_1_0;
                        v124 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v264);
                        v279 = v124;
                        v280 = v124;
                        LOBYTE(v148) = 19;
                        v281 = &ST30_4_0;
                        v282 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST30_4_0);
                        LOBYTE(v148) = 16;
                        sub_42A260(
                          (int)&miif,
                          (char)&v266,
                          ST30_4_0,
                          ST34_4_0,
                          ST38_4_0,
                          ST3C_4_0,
                          ST40_4_0,
                          ST44_4_0,
                          v31,
                          (int)&v266,
                          v33,
                          v34,
                          v35,
                          v45,
                          v46,
                          v47);
                      }
                      else
                      {
                        v27 = (unsigned int)&v265;
                        v270 = &ST4C_1_0;
                        v122 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v263);
                        v271 = v122;
                        v272 = v122;
                        LOBYTE(v148) = 17;
                        v273 = &ST34_4_0;
                        v123 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v264);
                        v274 = v123;
                        v275 = v123;
                        LOBYTE(v148) = 18;
                        v276 = &ST14_4_0;
                        v277 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST14_4_0);
                        LOBYTE(v148) = 16;
                        sub_428BB0(
                          (int)&miif,
                          (char)&v266,
                          ST14_4_0,
                          ST18_4_0,
                          ST1C_4_0,
                          ST20_4_0,
                          ST24_4_0,
                          ST28_4_0,
                          ST2C_4_0,
                          ST30_4_0,
                          ST34_4_0,
                          ST38_4_0,
                          ST3C_4_0,
                          ST40_4_0,
                          ST44_4_0,
                          v31,
                          (int)&v266,
                          v33,
                          v34,
                          v35,
                          v45,
                          v46,
                          v47);
                      }
                      if ( !(unsigned __int16)v265 )
                      {
                        v283 = &ST4C_1_0;
                        v284 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v263);
                        v125 = sub_41ABB0((int)&miif, v32, v33, v34, v35, v48, v49, v50);
                        v285 = v125;
                        v286 = v125;
                        if ( v125 >= 0 )
                        {
                          p->pkt.uin = *(_WORD *)sub_408850((int)&v168, v286);
                          p->pkt.data_len = 0;
                          p->pkt.type = 21;
                          send_packet((int)&miif, (char *)&p->pkt.uin);
                        }
                        p->pkt.uin = atoi(&v266);
                        v126 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v264);
                        p->pkt.data_len = sub_418050((int)p->data, v126, 16383);
                        p->pkt.type = 7;
                        send_packet((int)&miif, (char *)&p->pkt.uin);
                        p->pkt.uin = 0;
                        p->pkt.data_len = 0;
                        p->pkt.type = 7;
                        send_packet((int)&miif, (char *)&p->pkt.uin);
                      }
                      sub_4174F0(p->data, v265);
                      p->pkt.uin = 0;
                      p->pkt.type = 13;
                      p->pkt.data_len = strlen(p->data);
                      send_packet((int)&miif, (char *)&p->pkt.uin);
                      LOBYTE(v148) = 15;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v264);
                      LOBYTE(v148) = 0;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v263);
                      continue;
                    case 14:
                      p->data[p->pkt.data_len] = 0;
                      sprintf(&v249, "%u", p->pkt.uin);
                      v250 = &v31;
                      v114 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
                      v251 = v114;
                      v252 = v114;
                      LOBYTE(v148) = 11;
                      v253 = &ST30_4_0;
                      v254 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST30_4_0);
                      LOBYTE(v148) = 0;
                      sub_421310(
                        (int)&miif,
                        (char)&v249,
                        ST30_4_0,
                        ST34_4_0,
                        ST38_4_0,
                        ST3C_4_0,
                        ST40_4_0,
                        (int)&unk_432303,
                        v31,
                        v32,
                        v33,
                        v34,
                        v35,
                        v115,
                        v116,
                        1);
                      continue;
                    case 15:
                      data_arrived = (unsigned __int8)p->data;
                      if ( (signed int)(unsigned __int8)p->data < 13 )
                        sub_424730((int)&miif, dword_4334B0[data_arrived]);
                      continue;
                    case 18:
                      p->pkt.type = 19;
                      send_packet((int)&miif, (char *)&p->pkt.uin);
                      continue;
                    case 22:
                      data_arrived = (unsigned __int8)p->data;
                      if ( (unsigned __int8)p->data <= 0x22u )
                      {
                        v224 = &ST4C_1_0;
                        v101 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v225);
                        v226 = v101;
                        v227 = v101;
                        LOBYTE(v148) = 8;
                        v228 = &ST34_4_0;
                        v230 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v229);
                        LOBYTE(v148) = 0;
                        sub_420110(
                          (int)&miif,
                          data_arrived,
                          ST30_4_0,
                          ST34_4_0,
                          ST38_4_0,
                          ST3C_4_0,
                          ST40_4_0,
                          ST44_4_0,
                          v31,
                          v32,
                          v33,
                          v34,
                          v35,
                          v36,
                          v37,
                          v38);
                      }
                      continue;
                    case 23:
                      data_arrived = 0;
                      break;
                    case 24:
                      v98 = p->pkt.uin;
                      sprintf(p->data, "%u");
                      v222 = &ST4C_1_0;
                      v31 = (int)p->data;
                      v223 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST4C_1_0);
                      sub_424780((int)&miif, v32, v33, v34, v35, v99, v100, v98);
                      continue;
                    case 26:
                      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                        &v255,
                        v27,
                        ST6C_4_0,
                        ST70_4_0,
                        ST74_4_0);
                      LOBYTE(v148) = 12;
                      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                        &v256,
                        ST70_4_0,
                        ST74_4_0,
                        ST78_4_0,
                        ST7C_4_0);
                      LOBYTE(v148) = 13;
                      p->data[p->pkt.data_len] = 0;
                      v181 = (int)p->data;
                      sub_417FD0((int)&v255, v117);
                      v181 = (int)p->data;
                      v181 = (int)&p->data[strlen((const char *)v117) + 1];
                      sub_417FD0((int)&v256, (signed int *)ST6C_4_0);
                      v257 = &ST54_4_0;
                      v118 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v256);
                      v258 = v118;
                      v259 = v118;
                      LOBYTE(v148) = 14;
                      v260 = &ST34_4_0;
                      v261 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v255);
                      LOBYTE(v148) = 13;
                      sub_420110(
                        (int)&miif,
                        v262,
                        ST30_4_0,
                        ST34_4_0,
                        ST38_4_0,
                        ST3C_4_0,
                        ST40_4_0,
                        ST44_4_0,
                        v31,
                        v32,
                        v33,
                        v34,
                        v35,
                        v36,
                        v37,
                        v38);
                      LOBYTE(v148) = 12;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v256);
                      LOBYTE(v148) = 0;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v255);
                      continue;
                    case 27:
                      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                        &v287,
                        v27,
                        ST6C_4_0,
                        ST70_4_0,
                        ST74_4_0);
                      LOBYTE(v148) = 20;
                      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                        &v288,
                        ST6C_4_0,
                        ST70_4_0,
                        ST74_4_0,
                        ST78_4_0);
                      LOBYTE(v148) = 21;
                      v289 = 0;
                      p->data[p->pkt.data_len] = 0;
                      sprintf(&v290, "%u", p->pkt.uin);
                      v127 = sub_41AB50((int)&miif, (unsigned __int16)p->data);
                      v291 = v127;
                      if ( v127 < 0 )
                      {
                        if ( sub_408830((int)&v168) )
                        {
                          v129 = sub_408850((int)&v168, 0) + 4;
                          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v287);
                        }
                        else
                        {
                          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                            &v287,
                            &unk_432317);
                        }
                      }
                      else
                      {
                        v128 = sub_408850((int)&v168, v291) + 4;
                        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v287);
                      }
                      sub_417FD0((int)&v288, (signed int *)&v157);
                      v292 = &ST50_4_0;
                      v293 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST50_4_0);
                      v131 = sub_41ACD0((int)&miif, v33, v34, v35, v36, v51, v57, v130);
                      v294 = v131;
                      if ( v131 >= 0 )
                      {
                        v303 = &ST4C_1_0;
                        v304 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST4C_1_0);
                        sub_428980((int)&miif, v52, v53, v54, v55, v56, v57, (int)&v289, ST6C_4_0);
                        v181 = (int)&v289;
                        v305 = &ST50_4_0;
                        v134 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v287);
                        v306 = v134;
                        v307 = v134;
                        LOBYTE(v148) = 24;
                        v308 = &ST34_4_0;
                        v135 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v288);
                        v309 = v135;
                        v310 = v135;
                        LOBYTE(v148) = 25;
                        v311 = &ST14_4_0;
                        v312 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST14_4_0);
                        LOBYTE(v148) = 21;
                        sub_428BB0(
                          (int)&miif,
                          (char)&v290,
                          ST14_4_0,
                          ST18_4_0,
                          ST1C_4_0,
                          ST20_4_0,
                          ST24_4_0,
                          ST28_4_0,
                          ST2C_4_0,
                          ST30_4_0,
                          ST34_4_0,
                          ST38_4_0,
                          ST3C_4_0,
                          ST40_4_0,
                          ST44_4_0,
                          (char)&v290,
                          v32,
                          v33,
                          v34,
                          v35,
                          v58,
                          v59,
                          v60);
                      }
                      else
                      {
                        v27 = (unsigned int)&v289;
                        v295 = &ST4C_1_0;
                        v132 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v287);
                        v296 = v132;
                        v297 = v132;
                        LOBYTE(v148) = 22;
                        v298 = &ST34_4_0;
                        v133 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v288);
                        v299 = v133;
                        v300 = v133;
                        LOBYTE(v148) = 23;
                        v301 = &ST14_4_0;
                        v302 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST14_4_0);
                        LOBYTE(v148) = 21;
                        sub_428BB0(
                          (int)&miif,
                          (char)&v290,
                          ST14_4_0,
                          ST18_4_0,
                          ST1C_4_0,
                          ST20_4_0,
                          ST24_4_0,
                          ST28_4_0,
                          ST2C_4_0,
                          ST30_4_0,
                          ST34_4_0,
                          ST38_4_0,
                          ST3C_4_0,
                          ST40_4_0,
                          ST44_4_0,
                          v31,
                          (int)&v290,
                          v33,
                          v34,
                          v35,
                          v55,
                          v56,
                          v57);
                      }
                      if ( !(unsigned __int16)v289 )
                      {
                        v313 = &ST4C_1_0;
                        v314 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v287);
                        v136 = sub_41ABB0((int)&miif, v32, v33, v34, v35, v58, v59, v60);
                        v315 = v136;
                        v316 = v136;
                        if ( v136 >= 0 )
                        {
                          p->pkt.uin = *(_WORD *)sub_408850((int)&v168, v316);
                          p->pkt.data_len = 0;
                          p->pkt.type = 21;
                          send_packet((int)&miif, (char *)&p->pkt.uin);
                        }
                        p->pkt.uin = atoi(&v290);
                        v137 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v288);
                        p->pkt.data_len = sub_418050((int)p->data, v137, 16383);
                        p->pkt.type = 7;
                        send_packet((int)&miif, (char *)&p->pkt.uin);
                        p->pkt.uin = 0;
                        p->pkt.data_len = 0;
                        p->pkt.type = 7;
                        send_packet((int)&miif, (char *)&p->pkt.uin);
                      }
                      sub_4174F0(p->data, v289);
                      p->pkt.uin = 0;
                      p->pkt.type = 13;
                      p->pkt.data_len = strlen(p->data);
                      send_packet((int)&miif, (char *)&p->pkt.uin);
                      LOBYTE(v148) = 20;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v288);
                      LOBYTE(v148) = 0;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v287);
                      continue;
                    case 30:
                      data_arrived = (unsigned __int8)p->data;
                      if ( (signed int)(unsigned __int8)p->data < 5 )
                        sub_425BD0((int)&miif, LOBYTE(byte_432650[data_arrived]));
                      continue;
                    case 33:
                      p->data[p->pkt.data_len] = 0;
                      sprintf(&v317, "%u", p->pkt.uin);
                      v318 = &v31;
                      ST44_4_0 = (int)&v317;
                      v181 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
                      sub_428980((int)&miif, v31, v32, v33, v34, v35, v138, v139, (int)&v146);
                      if ( v146 )
                      {
                        p->pkt.data_len = sprintf(p->data, "Error! Expected %d, got %d", 0, (unsigned __int16)v146);
                        p->pkt.type = 6;
                        send_packet((int)&miif, (char *)&p->pkt.uin);
                      }
                      else
                      {
                        p->pkt.type = 34;
                        p->pkt.data_len = 0;
                        send_packet((int)&miif, (char *)&p->pkt.uin);
                      }
                      sub_4174F0(p->data, v146);
                      p->pkt.uin = 0;
                      p->pkt.type = 13;
                      p->pkt.data_len = strlen(p->data);
                      send_packet((int)&miif, (char *)&p->pkt.uin);
                      continue;
                    case 1:
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                    case 8:
                    case 9:
                    case 13:
                    case 16:
                    case 17:
                    case 19:
                    case 20:
                    case 21:
                    case 25:
                    case 28:
                    case 29:
                    case 31:
                    case 32:
                      goto LABEL_111;
                  }
                  while ( data_arrived < v164 )
                  {
                    if ( *(&v216 + 4 * data_arrived) == p->pkt.uin )
                    {
                      sprintf(p->data, "%u", *(&v217 + 4 * data_arrived));
                      v96 = &v218[16 * data_arrived];
                      v219 = &ST44_4_0;
                      ST40_4_0 = (int)p->data;
                      v220 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST44_4_0);
                      sub_420B30((int)&miif, ST44_4_0, v31, v32, v33, v34, v35, v97, v96, 1);
                      memmove(&v216 + 4 * data_arrived, &v221[16 * data_arrived], 16 * (31 - data_arrived));
                      --v164;
                      goto LABEL_26;
                    }
                    ++data_arrived;
                  }
                }
              }
              else
              {
                if ( p->pkt.type == 2 )
                  total_sent = ((_WORD)total_sent + 1) & 0x7FFF;
              }
            }
            else
            {
              v73 = gettime(0);
              v172 = v73;
              if ( v73 >= activity_time )
              {
LABEL_113:
                doDisconnect((int)&miif);
                goto LABEL_114;
              }
            }
          }
        }
      }
      else
      {
        sprintf(p->data, "Connect failed at %d%%", v165);
        p->pkt.data_len = strlen(p->data);
        p->pkt.uin = 0;
        p->pkt.type = 6;
        send_packet((int)&miif, (char *)&p->pkt.uin);
        Sleep(0x3E8u);
      }
      break;
    }
  }
LABEL_114:
  v140 = ntohs(*((_WORD *)v144 + 5));
  v141 = inet_ntoa((struct in_addr)*(v144 + 3));
  printf("\nDisconnect from %s:%i", v141, v140);
  v319 = 0;
  printf("\nThread %X (uin %u) received disconnect!", 0, *(v144 + 1));
  shutdown(s, 2);
  closesocket(s);
  v320 = v144;
  operator delete(v144);
  v144 = 0;
  ig11_mutex_toggle(0);
  --clientsNum;
  status_update();
  ig11_mutex_toggle(0);
  v321 = 0;
  v148 = -1;
  sub_415700((int)&miif);
  return v321;
}

//----- (0041A160) --------------------------------------------------------
int __cdecl main(int argc, const char **argv, const char *envp)
{
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  int ST24_4_0; // ST24_4@0
  unsigned int v6; // ST18_4@1
  int result; // eax@2
  int v8; // eax@3
  unsigned int v9; // eax@6
  int v10; // ST18_4@6
  int v11; // ST1C_4@6
  int v12; // ST20_4@6
  int v13; // ST24_4@6
  int v14; // eax@9
  int v15; // eax@9
  int v16; // eax@9
  int v17; // eax@9
  size_t v18; // eax@10
  int v19; // eax@12
  signed int v20; // eax@13
  int v21; // eax@14
  int v22; // eax@16
  int v23; // eax@18
  int v24; // eax@20
  SOCKET v25; // eax@22
  void *v26; // eax@23
  int v27; // ST14_4@26
  char *v28; // eax@26
  int v29; // eax@27
  DWORD v30; // eax@28
  int  s; // [sp+254h] [bp+0h]@1
  unsigned int v32; // [sp+244h] [bp-10h]@1
  int addrlen; // [sp+50h] [bp-204h]@1
  signed int v34; // [sp+9Ch] [bp-1B8h]@3
  char v35; // [sp+78h] [bp-1DCh]@6
  signed int v36; // [sp+250h] [bp-4h]@6
  char v37; // [sp+28h] [bp-22Ch]@6
  char v38; // [sp+4Bh] [bp-209h]@6
  struct WSAData WSAData; // [sp+A0h] [bp-1B4h]@11
  SOCKET s; // [sp+4Ch] [bp-208h]@13
  char optval; // [sp+97h] [bp-1BDh]@15
  struct sockaddr name; // [sp+68h] [bp-1ECh]@17
  int namelen; // [sp+98h] [bp-1BCh]@21
  struct sockaddr addr; // [sp+234h] [bp-20h]@22
  SOCKET v45; // [sp+24h] [bp-230h]@22
  void *v46; // [sp+64h] [bp-1F0h]@23
  int v47; // [sp+20h] [bp-234h]@27
  DWORD v48; // [sp+44h] [bp-210h]@31
  char p->pkt.uin; // [sp+54h] [bp-200h]@32

  v32 = (unsigned int)& s ^ dword_43901C;
  v6 = (unsigned int)& s ^ dword_43901C;
  addrlen = 16;
  if ( argc >= 2 )
  {
    v8 = atoi(*(argv + 1));
    v34 = v8;
    if ( v8 >= 2 && v34 <= 65535 )
    {
      printf("IG11 NatICQ server (rev %s)\n", "3256:3257M");
      printf("\nWin32 build");
      v9 = GetTickCount();
      srand(v9);
      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
        &v35,
        v6,
        ST1C_4_0,
        ST20_4_0,
        ST24_4_0);
      v36 = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
        &v37,
        v10,
        v11,
        v12,
        v13);
      LOBYTE(v36) = 1;
      _LocaleUpdate__GetLocaleT();
      
      sub_42F180((int)&v38, (int)&unk_439640, (int)&v35);
      sub_42F180((int)&v38, (int)&unk_439624, (int)&v37);
      
      if ( std__basic_string_char_std__char_traits_char__std__allocator_char____length(&v35)
        && std__basic_string_char_std__char_traits_char__std__allocator_char____length(&v37) )
      {
        v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&v35);
        forbid_mod = (char *)malloc(v14 + 1);
        v15 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&v37);
        forbid_build_2058 = (char *)malloc(v15 + 1);
        v16 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v35);
        strcpy(forbid_mod, (const char *)v16);
        v17 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v37);
        strcpy(forbid_build_2058, (const char *)v17);
        if ( argc == 3 )
        {
          v18 = strlen(*(argv + 2));
          path_to_stat = (char *)malloc(v18 + 1);
          strcpy(path_to_stat, *(argv + 2));
        }
        if ( WSAStartup(2u, &WSAData) )
        {
          v19 = WSAGetLastError();
          printf("\nWSAStartup() failed with error: %i", v19);
          LOBYTE(v36) = 0;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v37);
          v36 = -1;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
          result = -1;
        }
        else
        {
          v20 = socket(2, 1, 0);
          s = v20;
          if ( v20 == -1 )
          {
            v21 = WSAGetLastError();
            printf("\nsocket() failed with error: %i", v21);
            LOBYTE(v36) = 0;
            std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v37);
            v36 = -1;
            std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
            result = -1;
          }
          else
          {
            optval = 1;
            if ( setsockopt(s, 65535, 4, &optval, 1) == -1 )
            {
              v22 = WSAGetLastError();
              printf("\nsetsockopt(SO_REUSEADDR) failed with error: %i", v22);
              LOBYTE(v36) = 0;
              std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v37);
              v36 = -1;
              std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
              result = -1;
            }
            else
            {
              name.sa_family = 2;
              *(_DWORD *)&name.sa_data[2] = htonl(0);
              *(_WORD *)&name.sa_data[0] = htons(v34);
              if ( bind(s, &name, 16) == -1 )
              {
                v23 = WSAGetLastError();
                printf("\nbind() failed with error: %i", v23);
                LOBYTE(v36) = 0;
                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v37);
                v36 = -1;
                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
                result = -1;
              }
              else
              {
                if ( listen(s, 5) == -1 )
                {
                  v24 = WSAGetLastError();
                  printf("\nlisten() failed with error: %i", v24);
                  LOBYTE(v36) = 0;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v37);
                  v36 = -1;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
                  result = -1;
                }
                else
                {
                  clientsNum = 0;
                  ig11_mutex_create(0);
                  namelen = 16;
                  while ( 1 )
                  {
                    v25 = accept(s, &addr, &addrlen);
                    v45 = v25;
                    if ( v25 == -1 )
                      break;
                    v26 = operator new(0x18u);
                    v46 = v26;
                    if ( !v26 )
                    {
                      printf("\n memory allocation error!");
                      break;
                    }
                    *((_DWORD *)v46 + 1) = 0;
                    if ( !getpeername(v45, (struct sockaddr *)((char *)v46 + 8), &namelen) )
                    {
                      v27 = ntohs(*((_WORD *)v46 + 5));
                      v28 = inet_ntoa(*((struct in_addr *)v46 + 3));
                      printf("\nConnect from %s:%i", v28, v27);
                    }
                    *(_DWORD *)v46 = v45;
                    v29 = beginthreadex(0, 0, handle_connection, v46, 0, 0);
                    v47 = v29;
                    if ( v29 )
                    {
                      ig11_mutex_toggle(0);
                      ++clientsNum;
                      status_update();
                      ig11_mutex_toggle(0);
                    }
                    else
                    {
                      v30 = GetLastError();
                      printf("\nCreateThread() failed with error: %i", v30);
                    }
                  }
                  printf("\nFinished serving. Closing sockets and cleaning up...");
                  v48 = GetLastError();
                  shutdown(s, 2);
                  while ( recv(s, &p->pkt.uin, 16, 0) > 0 )
                    ;
                  ig11_mutex_destroy(0);
                  if ( path_to_stat )
                    free(path_to_stat);
                  free(forbid_mod);
                  free(forbid_build_2058);
                  LOBYTE(v36) = 0;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v37);
                  v36 = -1;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
                  result = 0;
                }
              }
            }
          }
        }
      }
      else
      {
        printf("\nInternal conversion fuckup");
        LOBYTE(v36) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v37);
        v36 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
        result = 0;
      }
    }
    else
    {
      printf("\nIncorrect port number. Value must be in range 2-65535");
      result = -1;
    }
  }
  else
  {
    printf("\nUsage: %s PORT [/path/to/statistic/output]", *argv);
    result = -1;
  }
  return result;
}

//----- (0041A800) --------------------------------------------------------
int __cdecl sub_41A800(int a1, char a2)
{
  int v2; // edx@2
  int  s; // [sp+38h] [bp+0h]@1
  unsigned int v5; // [sp+28h] [bp-10h]@1
  int v6; // [sp+0h] [bp-38h]@1
  signed int v7; // [sp+34h] [bp-4h]@1
  char v8; // [sp+4h] [bp-34h]@1
  unsigned int v9; // [sp+24h] [bp-14h]@1
  unsigned __int8 v10; // [sp+23h] [bp-15h]@3

  v5 = (unsigned int)& s ^ dword_43901C;
  v6 = 0;
  v7 = 1;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v8);
  LOBYTE(v7) = 2;
  v9 = 0;
  while ( v9 < std__basic_string_char_std__char_traits_char__std__allocator_char____size(&a2) )
  {
    v10 = *(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(&a2, v2, v9);
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(&v8, byte_4331C0[v9++] ^ v10);
  }
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v8);
  LOBYTE(v7) = 1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v8);
  LOBYTE(v7) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return a1;
}

//----- (0041A8E0) --------------------------------------------------------
signed int __thiscall sub_41A8E0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, u_short a9)
{
  signed int result; // eax@2
  int v10; // eax@1
  struct hostent *v11; // eax@1
  signed int v12; // eax@5
  int  s; // [sp+40h] [bp+0h]@1
  unsigned int v14; // [sp+30h] [bp-10h]@1
  int v15; // [sp+0h] [bp-40h]@1
  signed int v16; // [sp+3Ch] [bp-4h]@1
  struct hostent *v17; // [sp+18h] [bp-28h]@1
  struct sockaddr name; // [sp+1Ch] [bp-24h]@5
  SOCKET s; // [sp+2Ch] [bp-14h]@5
  SOCKET v20; // [sp+4h] [bp-3Ch]@9

  v14 = (unsigned int)& s ^ dword_43901C;
  v15 = this;
  v16 = 0;
  v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  v11 = gethostbyname((const char *)v10);
  v17 = v11;
  if ( v11 )
  {
    if ( *v17->h_addr_list )
    {
      memset(&name, 0, 0x10u);
      memcpy(&name.sa_data[2], *(const void **)v17->h_addr_list, 4u);
      *(_WORD *)&name.sa_data[0] = htons(a9);
      name.sa_family = 2;
      v12 = socket(2, 1, 0);
      s = v12;
      if ( v12 == -1 )
      {
        v16 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        result = -1;
      }
      else
      {
        if ( connect(s, &name, 16) )
        {
          closesocket(s);
          s = -1;
          v16 = -1;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
          result = -1;
        }
        else
        {
          v20 = s;
          v16 = -1;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
          result = v20;
        }
      }
    }
    else
    {
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      result = -1;
    }
  }
  else
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    result = -1;
  }
  return result;
}

//----- (0041AA60) --------------------------------------------------------
int __fastcall doDisconnect(int a1)
{
  int result; // eax@1
  int v2; // [sp+4h] [bp-Ch]@1
  int v3; // [sp+8h] [bp-8h]@3
  int v4; // [sp+Ch] [bp-4h]@3
  int v5; // [sp+0h] [bp-10h]@4

  v2 = a1;
  result = a1;
  if ( *(_DWORD *)(a1 + 724) )
  {
    if ( *(_DWORD *)(v2 + 724) != v2 )
    {
      doDisconnect();
      v3 = *(_DWORD *)(v2 + 724);
      result = v3;
      v4 = v3;
      if ( v3 )
      {
        result = (**(int (__thiscall ***)(_DWORD, _DWORD))v4)(v4, 1);
        v5 = result;
      }
      else
      {
        v5 = 0;
      }
      *(_DWORD *)(v2 + 724) = 0;
    }
  }
  if ( *(_DWORD *)(v2 + 600) >= 0 )
  {
    closesocket(*(_DWORD *)(v2 + 600));
    *(_DWORD *)(v2 + 600) = -1;
    result = v2;
    *(_DWORD *)(v2 + 600) = -1;
  }
  return result;
}

//----- (0041AB10) --------------------------------------------------------
__time64_t __cdecl sub_41AB10(__time64_t *Time)
{
  return time64(Time);
}

//----- (0041AB30) --------------------------------------------------------
__time64_t __cdecl sub_41AB30(struct tm *Tm)
{
  return mktime64(Tm);
}

//----- (0041AB50) --------------------------------------------------------
signed int __thiscall sub_41AB50(int this, unsigned __int16 a2)
{
  int v3; // [sp+0h] [bp-8h]@1
  unsigned int v4; // [sp+4h] [bp-4h]@1

  v3 = this;
  v4 = 0;
  while ( v4 < sub_408830(v3 + 32) )
  {
    if ( *(_WORD *)sub_408850(v3 + 32, v4) == a2 )
      return v4;
    ++v4;
  }
  return -1;
}

//----- (0041ABB0) --------------------------------------------------------
signed int __thiscall sub_41ABB0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  int v9; // eax@3
  int v10; // [sp+4h] [bp-20h]@1
  int v11; // [sp+20h] [bp-4h]@1
  unsigned int v12; // [sp+10h] [bp-14h]@1

  v10 = this;
  v11 = 0;
  v12 = 0;
  while ( v12 < sub_408830(v10 + 32) )
  {
    v9 = sub_408850(v10 + 32, v12);
    if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(v9 + 4, &a2) )
    {
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      return v12;
    }
    ++v12;
  }
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return -1;
}

//----- (0041AC70) --------------------------------------------------------
signed int __thiscall sub_41AC70(int this, unsigned __int16 a2)
{
  int v3; // [sp+0h] [bp-8h]@1
  unsigned int v4; // [sp+4h] [bp-4h]@1

  v3 = this;
  v4 = 0;
  while ( v4 < sub_4085B0(v3 + 8) )
  {
    if ( *(_WORD *)(sub_4085D0(v3 + 8, v4) + 88) == a2 )
      return v4;
    ++v4;
  }
  return -1;
}

//----- (0041ACD0) --------------------------------------------------------
signed int __thiscall sub_41ACD0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  int v9; // eax@3
  int v10; // [sp+4h] [bp-20h]@1
  int v11; // [sp+20h] [bp-4h]@1
  unsigned int v12; // [sp+10h] [bp-14h]@1

  v10 = this;
  v11 = 0;
  v12 = 0;
  while ( v12 < sub_4085B0(v10 + 8) )
  {
    v9 = sub_4085D0(v10 + 8, v12);
    if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(v9, &a2) )
    {
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      return v12;
    }
    ++v12;
  }
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return -1;
}

//----- (0041AD90) --------------------------------------------------------
char __thiscall sub_41AD90(int this, int a2, int a3)
{
  int v4; // eax@5
  int v5; // [sp+0h] [bp-10h]@1
  unsigned int v6; // [sp+Ch] [bp-4h]@1
  unsigned int v7; // [sp+8h] [bp-8h]@1
  unsigned int v8; // [sp+4h] [bp-Ch]@3

  v5 = this;
  v6 = (unsigned int)sub_4019B0(a2) >> 4;
  *(_DWORD *)a3 = 0;
  v7 = 0;
  while ( v7 < v6 )
  {
    v8 = 0;
    while ( v8 < 0x22 )
    {
      v4 = sub_4019D0(a2, 16 * v7);
      if ( !memcmp((const void *)v4, &stru_4327C0[v8], 0x10u) )
      {
        *(_DWORD *)a3 = v8 + 1;
        return 1;
      }
      ++v8;
    }
    ++v7;
  }
  return 0;
}

//----- (0041AE30) --------------------------------------------------------
char __thiscall sub_41AE30(int this, int a2)
{
  int v3; // eax@3
  int  s; // [sp+20h] [bp+0h]@1
  unsigned int v5; // [sp+1Ch] [bp-4h]@1
  int v6; // [sp+0h] [bp-20h]@1
  char v7; // [sp+Ch] [bp-14h]@1
  char v8; // [sp+Dh] [bp-13h]@1
  char v9; // [sp+Eh] [bp-12h]@1
  char v10; // [sp+Fh] [bp-11h]@1
  char v11; // [sp+10h] [bp-10h]@1
  char v12; // [sp+11h] [bp-Fh]@1
  char v13; // [sp+12h] [bp-Eh]@1
  char v14; // [sp+13h] [bp-Dh]@1
  char v15; // [sp+14h] [bp-Ch]@1
  char v16; // [sp+15h] [bp-Bh]@1
  char v17; // [sp+16h] [bp-Ah]@1
  char v18; // [sp+17h] [bp-9h]@1
  char v19; // [sp+18h] [bp-8h]@1
  char v20; // [sp+19h] [bp-7h]@1
  char v21; // [sp+1Ah] [bp-6h]@1
  char v22; // [sp+1Bh] [bp-5h]@1
  unsigned int v23; // [sp+8h] [bp-18h]@1
  unsigned int v24; // [sp+4h] [bp-1Ch]@1

  v5 = (unsigned int)& s ^ dword_43901C;
  v6 = this;
  v7 = 9;
  v8 = 70;
  v9 = 19;
  v10 = 78;
  v11 = 76;
  v12 = 127;
  v13 = 17;
  v14 = -47;
  v15 = -126;
  v16 = 34;
  v17 = 68;
  v18 = 69;
  v19 = 83;
  v20 = 84;
  v21 = 0;
  v22 = 0;
  v23 = (unsigned int)sub_4019B0(a2) >> 4;
  v24 = 0;
  while ( v24 < v23 )
  {
    v3 = sub_4019D0(a2, 16 * v24);
    if ( !memcmp((const void *)v3, &v7, 0x10u) )
      return 1;
    ++v24;
  }
  return 0;
}

//----- (0041AEF0) --------------------------------------------------------
char __thiscall sub_41AEF0(int this, int a2)
{
  int v3; // eax@3
  int  s; // [sp+20h] [bp+0h]@1
  unsigned int v5; // [sp+1Ch] [bp-4h]@1
  int v6; // [sp+0h] [bp-20h]@1
  char v7; // [sp+Ch] [bp-14h]@1
  char v8; // [sp+Dh] [bp-13h]@1
  char v9; // [sp+Eh] [bp-12h]@1
  char v10; // [sp+Fh] [bp-11h]@1
  char v11; // [sp+10h] [bp-10h]@1
  char v12; // [sp+11h] [bp-Fh]@1
  char v13; // [sp+12h] [bp-Eh]@1
  char v14; // [sp+13h] [bp-Dh]@1
  char v15; // [sp+14h] [bp-Ch]@1
  char v16; // [sp+15h] [bp-Bh]@1
  char v17; // [sp+16h] [bp-Ah]@1
  char v18; // [sp+17h] [bp-9h]@1
  char v19; // [sp+18h] [bp-8h]@1
  char v20; // [sp+19h] [bp-7h]@1
  char v21; // [sp+1Ah] [bp-6h]@1
  char v22; // [sp+1Bh] [bp-5h]@1
  unsigned int v23; // [sp+8h] [bp-18h]@1
  unsigned int v24; // [sp+4h] [bp-1Ch]@1

  v5 = (unsigned int)& s ^ dword_43901C;
  v6 = this;
  v7 = 9;
  v8 = 70;
  v9 = 19;
  v10 = 73;
  v11 = 76;
  v12 = 127;
  v13 = 17;
  v14 = -47;
  v15 = -126;
  v16 = 34;
  v17 = 68;
  v18 = 69;
  v19 = 83;
  v20 = 84;
  v21 = 0;
  v22 = 0;
  v23 = (unsigned int)sub_4019B0(a2) >> 4;
  v24 = 0;
  while ( v24 < v23 )
  {
    v3 = sub_4019D0(a2, 16 * v24);
    if ( !memcmp((const void *)v3, &v7, 0x10u) )
      return 1;
    ++v24;
  }
  return 0;
}

//----- (0041AFB0) --------------------------------------------------------
unsigned __int16 __fastcall sub_41AFB0(int a1)
{
  int v2; // eax@42
  int v3; // [sp+0h] [bp-30h]@1
  unsigned __int16 v4; // [sp+2Ch] [bp-4h]@1
  unsigned __int8 v5; // [sp+2Bh] [bp-5h]@6
  unsigned int v6; // [sp+24h] [bp-Ch]@6
  unsigned int v7; // [sp+20h] [bp-10h]@13
  unsigned int v8; // [sp+1Ch] [bp-14h]@20
  unsigned int v9; // [sp+18h] [bp-18h]@27
  unsigned int v10; // [sp+14h] [bp-1Ch]@34
  char v11; // [sp+Ch] [bp-24h]@41
  char v12; // [sp+4h] [bp-2Ch]@42

  v3 = a1;
  v4 = 1;
  while ( (signed int)v4 < 65534 )
  {
    if ( *(_WORD *)(v3 + 790) != v4 )
    {
      v5 = 0;
      v6 = 0;
      while ( v6 < sub_4085B0(v3 + 8) )
      {
        if ( *(_WORD *)(sub_4085D0(v3 + 8, v6) + 88) == v4 )
        {
          v5 = 1;
          break;
        }
        ++v6;
      }
      if ( !v5 )
      {
        v7 = 0;
        while ( v7 < sub_4085B0(v3 + 56) )
        {
          if ( *(_WORD *)(sub_4085D0(v3 + 56, v7) + 88) == v4 )
          {
            v5 = 1;
            break;
          }
          ++v7;
        }
        if ( !v5 )
        {
          v8 = 0;
          while ( v8 < sub_4085B0(v3 + 80) )
          {
            if ( *(_WORD *)(sub_4085D0(v3 + 80, v8) + 88) == v4 )
            {
              v5 = 1;
              break;
            }
            ++v8;
          }
          if ( !v5 )
          {
            v9 = 0;
            while ( v9 < sub_4085B0(v3 + 104) )
            {
              if ( *(_WORD *)(sub_4085D0(v3 + 104, v9) + 88) == v4 )
              {
                v5 = 1;
                break;
              }
              ++v9;
            }
            if ( !v5 )
            {
              v10 = 0;
              while ( v10 < sub_4085B0(v3 + 128) )
              {
                if ( *(_WORD *)(sub_4085D0(v3 + 128, v10) + 88) == v4 )
                {
                  v5 = 1;
                  break;
                }
                ++v10;
              }
              if ( !v5 )
              {
                sub_40DB10(v3 + 732, (int)&v11);
                while ( 1 )
                {
                  v2 = sub_408DE0(v3 + 732, (int)&v12);
                  if ( !sub_40EA30((int)&v11, v2) )
                    break;
                  if ( *(_WORD *)sub_4094B0((int)&v11) == v4 )
                  {
                    v5 = 1;
                    break;
                  }
                  sub_4094D0((int)&v11);
                }
                if ( !v5 )
                  return v4;
              }
            }
          }
        }
      }
    }
    ++v4;
  }
  return 0;
}

//----- (0041B210) --------------------------------------------------------
int __thiscall sub_41B210(int this, int a2, int a3)
{
  int result; // eax@1
  signed int v4; // edx@1
  int v5; // eax@5
  int v6; // eax@7
  int v7; // ST08_4@10
  int v8; // eax@10
  int v9; // eax@14
  int v10; // eax@16
  int v11; // ST08_4@19
  int v12; // eax@19
  int v13; // eax@23
  int v14; // eax@25
  int v15; // ST08_4@28
  int v16; // eax@28
  int v17; // eax@32
  int v18; // eax@34
  int v19; // ST08_4@37
  int v20; // eax@37
  int v21; // eax@41
  int v22; // eax@43
  int v23; // ST08_4@46
  int v24; // eax@46
  int v25; // eax@50
  int v26; // eax@52
  int v27; // ST08_4@55
  int v28; // eax@55
  int v29; // [sp+4h] [bp-20h]@1
  unsigned int v30; // [sp+20h] [bp-4h]@1
  signed int v31; // [sp+0h] [bp-24h]@1
  unsigned __int16 v32; // [sp+1Ch] [bp-8h]@7
  unsigned __int16 v33; // [sp+18h] [bp-Ch]@16
  unsigned __int16 v34; // [sp+14h] [bp-10h]@25
  unsigned __int16 v35; // [sp+10h] [bp-14h]@34
  unsigned __int16 v36; // [sp+Ch] [bp-18h]@43
  unsigned __int16 v37; // [sp+8h] [bp-1Ch]@52

  v29 = this;
  v30 = 16;
  v31 = 16;
  v4 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v30 = 17;
  if ( v4 == 10 )
  {
    ++v30;
    result = sub_4019B0(a2);
    if ( result >= v30 + 2 )
    {
      v5 = sub_4019D0(a2, v30);
      memcpy((void *)(a3 + 948), (const void *)v5, 2u);
      v30 += 2;
      result = sub_4019B0(a2);
      if ( result >= v30 + 2 )
      {
        v6 = sub_4019D0(a2, v30);
        memcpy(&v32, (const void *)v6, 2u);
        v30 += 2;
        result = sub_4019B0(a2);
        if ( result >= v30 + v32 )
        {
          if ( (signed int)v32 <= 1 )
          {
            std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 952, &unk_432727);
          }
          else
          {
            v7 = v32 - 1;
            v8 = sub_4019D0(a2, v30);
            std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 952, v8, v7);
          }
          v30 += v32;
          result = sub_4019B0(a2);
          if ( result >= v30 + 2 )
          {
            v9 = sub_4019D0(a2, v30);
            memcpy((void *)(a3 + 980), (const void *)v9, 2u);
            v30 += 2;
            result = sub_4019B0(a2);
            if ( result >= v30 + 2 )
            {
              v10 = sub_4019D0(a2, v30);
              memcpy(&v33, (const void *)v10, 2u);
              v30 += 2;
              result = sub_4019B0(a2);
              if ( result >= v30 + v33 )
              {
                if ( (signed int)v33 <= 1 )
                {
                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 984, &unk_432743);
                }
                else
                {
                  v11 = v33 - 1;
                  v12 = sub_4019D0(a2, v30);
                  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 984, v12, v11);
                }
                v30 += v33;
                result = sub_4019B0(a2);
                if ( result >= v30 + 2 )
                {
                  v13 = sub_4019D0(a2, v30);
                  memcpy((void *)(a3 + 1012), (const void *)v13, 2u);
                  v30 += 2;
                  result = sub_4019B0(a2);
                  if ( result >= v30 + 2 )
                  {
                    v14 = sub_4019D0(a2, v30);
                    memcpy(&v34, (const void *)v14, 2u);
                    v30 += 2;
                    result = sub_4019B0(a2);
                    if ( result >= v30 + v34 )
                    {
                      if ( (signed int)v34 <= 1 )
                      {
                        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                          a3 + 1016,
                          &unk_432756);
                      }
                      else
                      {
                        v15 = v34 - 1;
                        v16 = sub_4019D0(a2, v30);
                        std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 1016, v16, v15);
                      }
                      v30 += v34;
                      ++v30;
                      result = sub_4019B0(a2);
                      if ( result >= v30 + 2 )
                      {
                        v17 = sub_4019D0(a2, v30);
                        memcpy((void *)(a3 + 1044), (const void *)v17, 2u);
                        v30 += 2;
                        result = sub_4019B0(a2);
                        if ( result >= v30 + 2 )
                        {
                          v18 = sub_4019D0(a2, v30);
                          memcpy(&v35, (const void *)v18, 2u);
                          v30 += 2;
                          result = sub_4019B0(a2);
                          if ( result >= v30 + v35 )
                          {
                            if ( (signed int)v35 <= 1 )
                            {
                              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                a3 + 1048,
                                &unk_432757);
                            }
                            else
                            {
                              v19 = v35 - 1;
                              v20 = sub_4019D0(a2, v30);
                              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                a3 + 1048,
                                v20,
                                v19);
                            }
                            v30 += v35;
                            result = sub_4019B0(a2);
                            if ( result >= v30 + 2 )
                            {
                              v21 = sub_4019D0(a2, v30);
                              memcpy((void *)(a3 + 1076), (const void *)v21, 2u);
                              v30 += 2;
                              result = sub_4019B0(a2);
                              if ( result >= v30 + 2 )
                              {
                                v22 = sub_4019D0(a2, v30);
                                memcpy(&v36, (const void *)v22, 2u);
                                v30 += 2;
                                result = sub_4019B0(a2);
                                if ( result >= v30 + v36 )
                                {
                                  if ( (signed int)v36 <= 1 )
                                  {
                                    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                      a3 + 1080,
                                      &unk_43276F);
                                  }
                                  else
                                  {
                                    v23 = v36 - 1;
                                    v24 = sub_4019D0(a2, v30);
                                    std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                      a3 + 1080,
                                      v24,
                                      v23);
                                  }
                                  v30 += v36;
                                  result = sub_4019B0(a2);
                                  if ( result >= v30 + 2 )
                                  {
                                    v25 = sub_4019D0(a2, v30);
                                    memcpy((void *)(a3 + 1108), (const void *)v25, 2u);
                                    v30 += 2;
                                    result = sub_4019B0(a2);
                                    if ( result >= v30 + 2 )
                                    {
                                      v26 = sub_4019D0(a2, v30);
                                      memcpy(&v37, (const void *)v26, 2u);
                                      v30 += 2;
                                      result = sub_4019B0(a2);
                                      if ( result >= v30 + v37 )
                                      {
                                        if ( (signed int)v37 <= 1 )
                                        {
                                          result = std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                                     a3 + 1112,
                                                     &unk_432799);
                                        }
                                        else
                                        {
                                          v27 = v37 - 1;
                                          v28 = sub_4019D0(a2, v30);
                                          result = std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                                     a3 + 1112,
                                                     v28,
                                                     v27);
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

//----- (0041B7A0) --------------------------------------------------------
int __thiscall sub_41B7A0(int this, int a2, int a3)
{
  int result; // eax@1
  signed int v4; // edx@1
  int v5; // eax@5
  int v6; // eax@7
  int v7; // ST08_4@10
  int v8; // eax@10
  int v9; // eax@14
  int v10; // eax@16
  int v11; // ST08_4@19
  int v12; // eax@19
  int v13; // eax@23
  int v14; // eax@25
  int v15; // ST08_4@28
  int v16; // eax@28
  int v17; // eax@32
  int v18; // eax@34
  int v19; // ST08_4@37
  int v20; // eax@37
  int v21; // [sp+4h] [bp-18h]@1
  unsigned int v22; // [sp+18h] [bp-4h]@1
  signed int v23; // [sp+0h] [bp-1Ch]@1
  unsigned __int16 v24; // [sp+14h] [bp-8h]@7
  unsigned __int16 v25; // [sp+10h] [bp-Ch]@16
  unsigned __int16 v26; // [sp+Ch] [bp-10h]@25
  unsigned __int16 v27; // [sp+8h] [bp-14h]@34

  v21 = this;
  v22 = 16;
  v23 = 16;
  v4 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v22 = 17;
  if ( v4 == 10 )
  {
    ++v22;
    result = sub_4019B0(a2);
    if ( result >= v22 + 2 )
    {
      v5 = sub_4019D0(a2, v22);
      memcpy((void *)(a3 + 820), (const void *)v5, 2u);
      v22 += 2;
      result = sub_4019B0(a2);
      if ( result >= v22 + 2 )
      {
        v6 = sub_4019D0(a2, v22);
        memcpy(&v24, (const void *)v6, 2u);
        v22 += 2;
        result = sub_4019B0(a2);
        if ( result >= v22 + v24 )
        {
          if ( (signed int)v24 <= 1 )
          {
            std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 824, &unk_432717);
          }
          else
          {
            v7 = v24 - 1;
            v8 = sub_4019D0(a2, v22);
            std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 824, v8, v7);
          }
          v22 += v24;
          result = sub_4019B0(a2);
          if ( result >= v22 + 2 )
          {
            v9 = sub_4019D0(a2, v22);
            memcpy((void *)(a3 + 852), (const void *)v9, 2u);
            v22 += 2;
            result = sub_4019B0(a2);
            if ( result >= v22 + 2 )
            {
              v10 = sub_4019D0(a2, v22);
              memcpy(&v25, (const void *)v10, 2u);
              v22 += 2;
              result = sub_4019B0(a2);
              if ( result >= v22 + v25 )
              {
                if ( (signed int)v25 <= 1 )
                {
                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 856, &unk_43271B);
                }
                else
                {
                  v11 = v25 - 1;
                  v12 = sub_4019D0(a2, v22);
                  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 856, v12, v11);
                }
                v22 += v25;
                result = sub_4019B0(a2);
                if ( result >= v22 + 2 )
                {
                  v13 = sub_4019D0(a2, v22);
                  memcpy((void *)(a3 + 884), (const void *)v13, 2u);
                  v22 += 2;
                  result = sub_4019B0(a2);
                  if ( result >= v22 + 2 )
                  {
                    v14 = sub_4019D0(a2, v22);
                    memcpy(&v26, (const void *)v14, 2u);
                    v22 += 2;
                    result = sub_4019B0(a2);
                    if ( result >= v22 + v26 )
                    {
                      if ( (signed int)v26 <= 1 )
                      {
                        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                          a3 + 888,
                          &unk_43271F);
                      }
                      else
                      {
                        v15 = v26 - 1;
                        v16 = sub_4019D0(a2, v22);
                        std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 888, v16, v15);
                      }
                      v22 += v26;
                      result = sub_4019B0(a2);
                      if ( result >= v22 + 2 )
                      {
                        v17 = sub_4019D0(a2, v22);
                        memcpy((void *)(a3 + 916), (const void *)v17, 2u);
                        v22 += 2;
                        result = sub_4019B0(a2);
                        if ( result >= v22 + 2 )
                        {
                          v18 = sub_4019D0(a2, v22);
                          memcpy(&v27, (const void *)v18, 2u);
                          v22 += 2;
                          result = sub_4019B0(a2);
                          if ( result >= v22 + v27 )
                          {
                            if ( (signed int)v27 <= 1 )
                            {
                              result = std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                         a3 + 920,
                                         &unk_432723);
                            }
                            else
                            {
                              v19 = v27 - 1;
                              v20 = sub_4019D0(a2, v22);
                              result = std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                         a3 + 920,
                                         v20,
                                         v19);
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

//----- (0041BB70) --------------------------------------------------------
int __thiscall sub_41BB70(int this, int a2, int a3)
{
  int result; // eax@1
  signed int v4; // edx@1
  int v5; // eax@5
  int v6; // ST08_4@8
  int v7; // eax@8
  int v8; // [sp+4h] [bp-Ch]@1
  unsigned int v9; // [sp+Ch] [bp-4h]@1
  signed int v10; // [sp+0h] [bp-10h]@1
  unsigned __int16 v11; // [sp+8h] [bp-8h]@5

  v8 = this;
  v9 = 16;
  v10 = 16;
  v4 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v9 = 17;
  if ( v4 == 10 )
  {
    result = sub_4019B0(a2);
    if ( result >= v9 + 2 )
    {
      v5 = sub_4019D0(a2, v9);
      memcpy(&v11, (const void *)v5, 2u);
      v9 += 2;
      result = sub_4019B0(a2);
      if ( result >= v9 + v11 )
      {
        if ( (signed int)v11 <= 1 )
        {
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 792, &unk_432716);
        }
        else
        {
          v6 = v11 - 1;
          v7 = sub_4019D0(a2, v9);
          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 792, v7, v6);
        }
        result = v9 + v11;
      }
    }
  }
  return result;
}

//----- (0041BC50) --------------------------------------------------------
int __thiscall sub_41BC50(int this, int a2, int a3)
{
  int result; // eax@1
  signed int v4; // edx@1
  int v5; // eax@5
  int v6; // ST08_4@8
  int v7; // eax@8
  int v8; // eax@12
  int v9; // ST08_4@15
  int v10; // eax@15
  int v11; // eax@19
  int v12; // ST08_4@22
  int v13; // eax@22
  int v14; // eax@26
  int v15; // ST08_4@29
  int v16; // eax@29
  int v17; // eax@33
  int v18; // ST08_4@36
  int v19; // eax@36
  int v20; // eax@40
  int v21; // ST08_4@43
  int v22; // eax@43
  int v23; // eax@47
  int v24; // eax@49
  int v25; // ST08_4@52
  int v26; // eax@52
  int v27; // eax@56
  int v28; // ST08_4@59
  int v29; // eax@59
  int v30; // eax@63
  int v31; // ST08_4@66
  int v32; // eax@66
  int v33; // eax@70
  int v34; // eax@72
  int v35; // ST08_4@75
  int v36; // eax@75
  int v37; // [sp+4h] [bp-30h]@1
  unsigned int v38; // [sp+30h] [bp-4h]@1
  signed int v39; // [sp+0h] [bp-34h]@1
  unsigned __int16 v40; // [sp+2Ch] [bp-8h]@5
  unsigned __int16 v41; // [sp+28h] [bp-Ch]@12
  unsigned __int16 v42; // [sp+24h] [bp-10h]@19
  unsigned __int16 v43; // [sp+20h] [bp-14h]@26
  unsigned __int16 v44; // [sp+1Ch] [bp-18h]@33
  unsigned __int16 v45; // [sp+18h] [bp-1Ch]@40
  unsigned __int16 v46; // [sp+14h] [bp-20h]@49
  unsigned __int16 v47; // [sp+10h] [bp-24h]@56
  unsigned __int16 v48; // [sp+Ch] [bp-28h]@63
  unsigned __int16 v49; // [sp+8h] [bp-2Ch]@72

  v37 = this;
  v38 = 16;
  v39 = 16;
  v4 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v38 = 17;
  if ( v4 == 10 )
  {
    result = sub_4019B0(a2);
    if ( result >= v38 + 2 )
    {
      v5 = sub_4019D0(a2, v38);
      memcpy(&v40, (const void *)v5, 2u);
      v38 += 2;
      result = sub_4019B0(a2);
      if ( result >= v38 + v40 )
      {
        if ( (signed int)v40 <= 1 )
        {
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 504, &unk_432693);
        }
        else
        {
          v6 = v40 - 1;
          v7 = sub_4019D0(a2, v38);
          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 504, v7, v6);
        }
        v38 += v40;
        result = sub_4019B0(a2);
        if ( result >= v38 + 2 )
        {
          v8 = sub_4019D0(a2, v38);
          memcpy(&v41, (const void *)v8, 2u);
          v38 += 2;
          result = sub_4019B0(a2);
          if ( result >= v38 + v41 )
          {
            if ( (signed int)v41 <= 1 )
            {
              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 532, &unk_432697);
            }
            else
            {
              v9 = v41 - 1;
              v10 = sub_4019D0(a2, v38);
              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 532, v10, v9);
            }
            v38 += v41;
            result = sub_4019B0(a2);
            if ( result >= v38 + 2 )
            {
              v11 = sub_4019D0(a2, v38);
              memcpy(&v42, (const void *)v11, 2u);
              v38 += 2;
              result = sub_4019B0(a2);
              if ( result >= v38 + v42 )
              {
                if ( (signed int)v42 <= 1 )
                {
                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 560, &unk_43269B);
                }
                else
                {
                  v12 = v42 - 1;
                  v13 = sub_4019D0(a2, v38);
                  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 560, v13, v12);
                }
                v38 += v42;
                result = sub_4019B0(a2);
                if ( result >= v38 + 2 )
                {
                  v14 = sub_4019D0(a2, v38);
                  memcpy(&v43, (const void *)v14, 2u);
                  v38 += 2;
                  result = sub_4019B0(a2);
                  if ( result >= v38 + v43 )
                  {
                    if ( (signed int)v43 <= 1 )
                    {
                      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                        a3 + 588,
                        &unk_43269F);
                    }
                    else
                    {
                      v15 = v43 - 1;
                      v16 = sub_4019D0(a2, v38);
                      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 588, v16, v15);
                    }
                    v38 += v43;
                    result = sub_4019B0(a2);
                    if ( result >= v38 + 2 )
                    {
                      v17 = sub_4019D0(a2, v38);
                      memcpy(&v44, (const void *)v17, 2u);
                      v38 += 2;
                      result = sub_4019B0(a2);
                      if ( result >= v38 + v44 )
                      {
                        if ( (signed int)v44 <= 1 )
                        {
                          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                            a3 + 616,
                            &unk_4326A3);
                        }
                        else
                        {
                          v18 = v44 - 1;
                          v19 = sub_4019D0(a2, v38);
                          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                            a3 + 616,
                            v19,
                            v18);
                        }
                        v38 += v44;
                        result = sub_4019B0(a2);
                        if ( result >= v38 + 2 )
                        {
                          v20 = sub_4019D0(a2, v38);
                          memcpy(&v45, (const void *)v20, 2u);
                          v38 += 2;
                          result = sub_4019B0(a2);
                          if ( result >= v38 + v45 )
                          {
                            if ( (signed int)v45 <= 1 )
                            {
                              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                a3 + 644,
                                &unk_4326A9);
                            }
                            else
                            {
                              v21 = v45 - 1;
                              v22 = sub_4019D0(a2, v38);
                              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                a3 + 644,
                                v22,
                                v21);
                            }
                            v38 += v45;
                            result = sub_4019B0(a2);
                            if ( result >= v38 + 2 )
                            {
                              v23 = sub_4019D0(a2, v38);
                              memcpy((void *)(a3 + 672), (const void *)v23, 2u);
                              v38 += 2;
                              result = sub_4019B0(a2);
                              if ( result >= v38 + 2 )
                              {
                                v24 = sub_4019D0(a2, v38);
                                memcpy(&v46, (const void *)v24, 2u);
                                v38 += 2;
                                result = sub_4019B0(a2);
                                if ( result >= v38 + v46 )
                                {
                                  if ( (signed int)v46 <= 1 )
                                  {
                                    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                      a3 + 676,
                                      &unk_4326AA);
                                  }
                                  else
                                  {
                                    v25 = v46 - 1;
                                    v26 = sub_4019D0(a2, v38);
                                    std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                      a3 + 676,
                                      v26,
                                      v25);
                                  }
                                  v38 += v46;
                                  result = sub_4019B0(a2);
                                  if ( result >= v38 + 2 )
                                  {
                                    v27 = sub_4019D0(a2, v38);
                                    memcpy(&v47, (const void *)v27, 2u);
                                    v38 += 2;
                                    result = sub_4019B0(a2);
                                    if ( result >= v38 + v47 )
                                    {
                                      if ( (signed int)v47 <= 1 )
                                      {
                                        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                          a3 + 704,
                                          &unk_4326AB);
                                      }
                                      else
                                      {
                                        v28 = v47 - 1;
                                        v29 = sub_4019D0(a2, v38);
                                        std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                          a3 + 704,
                                          v29,
                                          v28);
                                      }
                                      v38 += v47;
                                      result = sub_4019B0(a2);
                                      if ( result >= v38 + 2 )
                                      {
                                        v30 = sub_4019D0(a2, v38);
                                        memcpy(&v48, (const void *)v30, 2u);
                                        v38 += 2;
                                        result = sub_4019B0(a2);
                                        if ( result >= v38 + v48 )
                                        {
                                          if ( (signed int)v48 <= 1 )
                                          {
                                            std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                              a3 + 732,
                                              &unk_4326B3);
                                          }
                                          else
                                          {
                                            v31 = v48 - 1;
                                            v32 = sub_4019D0(a2, v38);
                                            std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                              a3 + 732,
                                              v32,
                                              v31);
                                          }
                                          v38 += v48;
                                          result = sub_4019B0(a2);
                                          if ( result >= v38 + 2 )
                                          {
                                            v33 = sub_4019D0(a2, v38);
                                            memcpy((void *)(a3 + 760), (const void *)v33, 2u);
                                            v38 += 2;
                                            result = sub_4019B0(a2);
                                            if ( result >= v38 + 2 )
                                            {
                                              v34 = sub_4019D0(a2, v38);
                                              memcpy(&v49, (const void *)v34, 2u);
                                              v38 += 2;
                                              result = sub_4019B0(a2);
                                              if ( result >= v38 + v49 )
                                              {
                                                if ( (signed int)v49 <= 1 )
                                                {
                                                  result = std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                                             a3 + 764,
                                                             &unk_4326BF);
                                                }
                                                else
                                                {
                                                  v35 = v49 - 1;
                                                  v36 = sub_4019D0(a2, v38);
                                                  result = std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                                             a3 + 764,
                                                             v36,
                                                             v35);
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

//----- (0041C350) --------------------------------------------------------
int __thiscall sub_41C350(int this, int a2, int a3)
{
  int result; // eax@1
  signed int v4; // edx@1
  int v5; // eax@5
  int v6; // eax@7
  int v7; // eax@9
  int v8; // ST08_4@12
  int v9; // eax@12
  int v10; // [sp+4h] [bp-Ch]@1
  unsigned int v11; // [sp+Ch] [bp-4h]@1
  signed int v12; // [sp+0h] [bp-10h]@1
  unsigned __int16 v13; // [sp+8h] [bp-8h]@9

  v10 = this;
  v11 = 16;
  v12 = 16;
  v4 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v11 = 17;
  if ( v4 == 10 )
  {
    result = sub_4019B0(a2);
    if ( result >= v11 + 1 )
    {
      v5 = sub_4019D0(a2, v11);
      memcpy((void *)(a3 + 472), (const void *)v5, 1u);
      ++v11;
      result = sub_4019B0(a2);
      if ( result >= v11 + 2 )
      {
        v6 = sub_4019D0(a2, v11);
        memcpy((void *)(a3 + 474), (const void *)v6, 2u);
        v11 += 2;
        result = sub_4019B0(a2);
        if ( result >= v11 + 2 )
        {
          v7 = sub_4019D0(a2, v11);
          memcpy(&v13, (const void *)v7, 2u);
          v11 += 2;
          result = sub_4019B0(a2);
          if ( result >= v11 + v13 )
          {
            if ( (signed int)v13 <= 1 )
            {
              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 476, &unk_43267B);
            }
            else
            {
              v8 = v13 - 1;
              v9 = sub_4019D0(a2, v11);
              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 476, v9, v8);
            }
            result = v11 + v13;
          }
        }
      }
    }
  }
  return result;
}

//----- (0041C4B0) --------------------------------------------------------
unsigned int __thiscall sub_41C4B0(int this, int a2, int a3)
{
  unsigned int result; // eax@1
  signed int v4; // edx@1
  int v5; // eax@5
  int v6; // eax@7
  int v7; // eax@9
  int v8; // ST08_4@12
  int v9; // eax@12
  int v10; // eax@16
  int v11; // eax@18
  int v12; // eax@20
  int v13; // eax@22
  int v14; // eax@24
  int v15; // eax@26
  int v16; // eax@28
  int v17; // ST08_4@31
  int v18; // eax@31
  int v19; // eax@35
  int v20; // ST08_4@38
  int v21; // eax@38
  int v22; // eax@42
  int v23; // eax@44
  int v24; // eax@46
  int v25; // eax@48
  int v26; // [sp+4h] [bp-14h]@1
  unsigned int v27; // [sp+14h] [bp-4h]@1
  signed int v28; // [sp+0h] [bp-18h]@1
  unsigned __int16 v29; // [sp+10h] [bp-8h]@9
  unsigned __int16 v30; // [sp+Ch] [bp-Ch]@28
  unsigned __int16 v31; // [sp+8h] [bp-10h]@35

  v26 = this;
  v27 = 16;
  v28 = 16;
  v4 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v27 = 17;
  if ( v4 == 10 )
  {
    result = sub_4019B0(a2);
    if ( result >= v27 + 2 )
    {
      v5 = sub_4019D0(a2, v27);
      memcpy((void *)(a3 + 344), (const void *)v5, 2u);
      v27 += 2;
      result = sub_4019B0(a2);
      if ( result >= v27 + 1 )
      {
        v6 = sub_4019D0(a2, v27);
        memcpy((void *)(a3 + 346), (const void *)v6, 1u);
        ++v27;
        result = sub_4019B0(a2);
        if ( result >= v27 + 2 )
        {
          v7 = sub_4019D0(a2, v27);
          memcpy(&v29, (const void *)v7, 2u);
          v27 += 2;
          result = sub_4019B0(a2);
          if ( result >= v27 + v29 )
          {
            if ( (signed int)v29 <= 1 )
            {
              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 348, &unk_43263F);
            }
            else
            {
              v8 = v29 - 1;
              v9 = sub_4019D0(a2, v27);
              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 348, v9, v8);
            }
            v27 += v29;
            result = sub_4019B0(a2);
            if ( result >= v27 + 2 )
            {
              v10 = sub_4019D0(a2, v27);
              memcpy((void *)(a3 + 376), (const void *)v10, 2u);
              v27 += 2;
              result = sub_4019B0(a2);
              if ( result >= v27 + 1 )
              {
                v11 = sub_4019D0(a2, v27);
                memcpy((void *)(a3 + 378), (const void *)v11, 1u);
                ++v27;
                result = sub_4019B0(a2);
                if ( result >= v27 + 1 )
                {
                  v12 = sub_4019D0(a2, v27);
                  memcpy((void *)(a3 + 379), (const void *)v12, 1u);
                  ++v27;
                  result = sub_4019B0(a2);
                  if ( result >= v27 + 1 )
                  {
                    v13 = sub_4019D0(a2, v27);
                    memcpy((void *)(a3 + 380), (const void *)v13, 1u);
                    ++v27;
                    result = sub_4019B0(a2);
                    if ( result >= v27 + 1 )
                    {
                      v14 = sub_4019D0(a2, v27);
                      memcpy((void *)(a3 + 381), (const void *)v14, 1u);
                      ++v27;
                      result = sub_4019B0(a2);
                      if ( result >= v27 + 1 )
                      {
                        v15 = sub_4019D0(a2, v27);
                        memcpy((void *)(a3 + 382), (const void *)v15, 1u);
                        ++v27;
                        v27 += 2;
                        result = sub_4019B0(a2);
                        if ( result >= v27 + 2 )
                        {
                          v16 = sub_4019D0(a2, v27);
                          memcpy(&v30, (const void *)v16, 2u);
                          v27 += 2;
                          result = sub_4019B0(a2);
                          if ( result >= v27 + v30 )
                          {
                            if ( (signed int)v30 <= 1 )
                            {
                              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                a3 + 384,
                                &unk_432666);
                            }
                            else
                            {
                              v17 = v30 - 1;
                              v18 = sub_4019D0(a2, v27);
                              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                a3 + 384,
                                v18,
                                v17);
                            }
                            v27 += v30;
                            result = sub_4019B0(a2);
                            if ( result >= v27 + 2 )
                            {
                              v19 = sub_4019D0(a2, v27);
                              memcpy(&v31, (const void *)v19, 2u);
                              v27 += 2;
                              result = sub_4019B0(a2);
                              if ( result >= v27 + v31 )
                              {
                                if ( (signed int)v31 <= 1 )
                                {
                                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                    a3 + 412,
                                    &unk_432667);
                                }
                                else
                                {
                                  v20 = v31 - 1;
                                  v21 = sub_4019D0(a2, v27);
                                  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                    a3 + 412,
                                    v21,
                                    v20);
                                }
                                v27 += v31;
                                result = sub_4019B0(a2);
                                if ( result >= v27 + 2 )
                                {
                                  v22 = sub_4019D0(a2, v27);
                                  memcpy((void *)(a3 + 440), (const void *)v22, 2u);
                                  v27 += 2;
                                  result = sub_4019B0(a2);
                                  if ( result >= v27 + 1 )
                                  {
                                    v23 = sub_4019D0(a2, v27);
                                    memcpy((void *)(a3 + 442), (const void *)v23, 1u);
                                    ++v27;
                                    result = sub_4019B0(a2);
                                    if ( result >= v27 + 1 )
                                    {
                                      v24 = sub_4019D0(a2, v27);
                                      memcpy((void *)(a3 + 443), (const void *)v24, 1u);
                                      ++v27;
                                      result = sub_4019B0(a2);
                                      if ( result >= v27 + 2 )
                                      {
                                        v25 = sub_4019D0(a2, v27);
                                        result = (unsigned int)memcpy((void *)(a3 + 444), (const void *)v25, 2u);
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

//----- (0041C9E0) --------------------------------------------------------
unsigned int __thiscall sub_41C9E0(int this, int a2, int a3)
{
  unsigned int result; // eax@1
  signed int v4; // edx@1
  int v5; // eax@5
  int v6; // ST08_4@8
  int v7; // eax@8
  int v8; // eax@12
  int v9; // ST08_4@15
  int v10; // eax@15
  int v11; // eax@19
  int v12; // ST08_4@22
  int v13; // eax@22
  int v14; // eax@26
  int v15; // ST08_4@29
  int v16; // eax@29
  int v17; // eax@33
  int v18; // ST08_4@36
  int v19; // eax@36
  int v20; // eax@40
  int v21; // ST08_4@43
  int v22; // eax@43
  int v23; // eax@47
  int v24; // ST08_4@50
  int v25; // eax@50
  int v26; // eax@54
  int v27; // ST08_4@57
  int v28; // eax@57
  int v29; // eax@61
  int v30; // ST08_4@64
  int v31; // eax@64
  int v32; // eax@68
  int v33; // ST08_4@71
  int v34; // eax@71
  int v35; // eax@75
  int v36; // ST08_4@78
  int v37; // eax@78
  int v38; // eax@82
  int v39; // eax@84
  int v40; // eax@86
  int v41; // eax@88
  int v42; // eax@90
  int v43; // eax@92
  int v44; // [sp+4h] [bp-34h]@1
  unsigned int v45; // [sp+34h] [bp-4h]@1
  signed int v46; // [sp+0h] [bp-38h]@1
  unsigned __int16 v47; // [sp+30h] [bp-8h]@5
  unsigned __int16 v48; // [sp+2Ch] [bp-Ch]@12
  unsigned __int16 v49; // [sp+28h] [bp-10h]@19
  unsigned __int16 v50; // [sp+24h] [bp-14h]@26
  unsigned __int16 v51; // [sp+20h] [bp-18h]@33
  unsigned __int16 v52; // [sp+1Ch] [bp-1Ch]@40
  unsigned __int16 v53; // [sp+18h] [bp-20h]@47
  unsigned __int16 v54; // [sp+14h] [bp-24h]@54
  unsigned __int16 v55; // [sp+10h] [bp-28h]@61
  unsigned __int16 v56; // [sp+Ch] [bp-2Ch]@68
  unsigned __int16 v57; // [sp+8h] [bp-30h]@75

  v44 = this;
  v45 = 16;
  v46 = 16;
  v4 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v45 = 17;
  if ( v4 == 10 )
  {
    result = sub_4019B0(a2);
    if ( result >= v45 + 2 )
    {
      v5 = sub_4019D0(a2, v45);
      memcpy(&v47, (const void *)v5, 2u);
      v45 += 2;
      result = sub_4019B0(a2);
      if ( result >= v45 + v47 )
      {
        if ( (signed int)v47 <= 1 )
        {
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 28, &unk_4325E7);
        }
        else
        {
          v6 = v47 - 1;
          v7 = sub_4019D0(a2, v45);
          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 28, v7, v6);
        }
        v45 += v47;
        result = sub_4019B0(a2);
        if ( result >= v45 + 2 )
        {
          v8 = sub_4019D0(a2, v45);
          memcpy(&v48, (const void *)v8, 2u);
          v45 += 2;
          result = sub_4019B0(a2);
          if ( result >= v45 + v48 )
          {
            if ( (signed int)v48 <= 1 )
            {
              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 56, &unk_4325F6);
            }
            else
            {
              v9 = v48 - 1;
              v10 = sub_4019D0(a2, v45);
              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 56, v10, v9);
            }
            v45 += v48;
            result = sub_4019B0(a2);
            if ( result >= v45 + 2 )
            {
              v11 = sub_4019D0(a2, v45);
              memcpy(&v49, (const void *)v11, 2u);
              v45 += 2;
              result = sub_4019B0(a2);
              if ( result >= v45 + v49 )
              {
                if ( (signed int)v49 <= 1 )
                {
                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3 + 84, &unk_4325F7);
                }
                else
                {
                  v12 = v49 - 1;
                  v13 = sub_4019D0(a2, v45);
                  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 84, v13, v12);
                }
                v45 += v49;
                result = sub_4019B0(a2);
                if ( result >= v45 + 2 )
                {
                  v14 = sub_4019D0(a2, v45);
                  memcpy(&v50, (const void *)v14, 2u);
                  v45 += 2;
                  result = sub_4019B0(a2);
                  if ( result >= v45 + v50 )
                  {
                    if ( (signed int)v50 <= 1 )
                    {
                      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                        a3 + 112,
                        &unk_432602);
                    }
                    else
                    {
                      v15 = v50 - 1;
                      v16 = sub_4019D0(a2, v45);
                      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3 + 112, v16, v15);
                    }
                    v45 += v50;
                    result = sub_4019B0(a2);
                    if ( result >= v45 + 2 )
                    {
                      v17 = sub_4019D0(a2, v45);
                      memcpy(&v51, (const void *)v17, 2u);
                      v45 += 2;
                      result = sub_4019B0(a2);
                      if ( result >= v45 + v51 )
                      {
                        if ( (signed int)v51 <= 1 )
                        {
                          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                            a3 + 140,
                            &unk_432603);
                        }
                        else
                        {
                          v18 = v51 - 1;
                          v19 = sub_4019D0(a2, v45);
                          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                            a3 + 140,
                            v19,
                            v18);
                        }
                        v45 += v51;
                        result = sub_4019B0(a2);
                        if ( result >= v45 + 2 )
                        {
                          v20 = sub_4019D0(a2, v45);
                          memcpy(&v52, (const void *)v20, 2u);
                          v45 += 2;
                          result = sub_4019B0(a2);
                          if ( result >= v45 + v52 )
                          {
                            if ( (signed int)v52 <= 1 )
                            {
                              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                a3 + 168,
                                &unk_432612);
                            }
                            else
                            {
                              v21 = v52 - 1;
                              v22 = sub_4019D0(a2, v45);
                              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                a3 + 168,
                                v22,
                                v21);
                            }
                            v45 += v52;
                            result = sub_4019B0(a2);
                            if ( result >= v45 + 2 )
                            {
                              v23 = sub_4019D0(a2, v45);
                              memcpy(&v53, (const void *)v23, 2u);
                              v45 += 2;
                              result = sub_4019B0(a2);
                              if ( result >= v45 + v53 )
                              {
                                if ( (signed int)v53 <= 1 )
                                {
                                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                    a3 + 196,
                                    &unk_432613);
                                }
                                else
                                {
                                  v24 = v53 - 1;
                                  v25 = sub_4019D0(a2, v45);
                                  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                    a3 + 196,
                                    v25,
                                    v24);
                                }
                                v45 += v53;
                                result = sub_4019B0(a2);
                                if ( result >= v45 + 2 )
                                {
                                  v26 = sub_4019D0(a2, v45);
                                  memcpy(&v54, (const void *)v26, 2u);
                                  v45 += 2;
                                  result = sub_4019B0(a2);
                                  if ( result >= v45 + v54 )
                                  {
                                    if ( (signed int)v54 <= 1 )
                                    {
                                      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                        a3 + 224,
                                        &unk_432629);
                                    }
                                    else
                                    {
                                      v27 = v54 - 1;
                                      v28 = sub_4019D0(a2, v45);
                                      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                        a3 + 224,
                                        v28,
                                        v27);
                                    }
                                    v45 += v54;
                                    result = sub_4019B0(a2);
                                    if ( result >= v45 + 2 )
                                    {
                                      v29 = sub_4019D0(a2, v45);
                                      memcpy(&v55, (const void *)v29, 2u);
                                      v45 += 2;
                                      result = sub_4019B0(a2);
                                      if ( result >= v45 + v55 )
                                      {
                                        if ( (signed int)v55 <= 1 )
                                        {
                                          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                            a3 + 252,
                                            &unk_43262A);
                                        }
                                        else
                                        {
                                          v30 = v55 - 1;
                                          v31 = sub_4019D0(a2, v45);
                                          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                            a3 + 252,
                                            v31,
                                            v30);
                                        }
                                        v45 += v55;
                                        result = sub_4019B0(a2);
                                        if ( result >= v45 + 2 )
                                        {
                                          v32 = sub_4019D0(a2, v45);
                                          memcpy(&v56, (const void *)v32, 2u);
                                          v45 += 2;
                                          result = sub_4019B0(a2);
                                          if ( result >= v45 + v56 )
                                          {
                                            if ( (signed int)v56 <= 1 )
                                            {
                                              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                                a3 + 280,
                                                &unk_43262B);
                                            }
                                            else
                                            {
                                              v33 = v56 - 1;
                                              v34 = sub_4019D0(a2, v45);
                                              std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                                a3 + 280,
                                                v34,
                                                v33);
                                            }
                                            v45 += v56;
                                            result = sub_4019B0(a2);
                                            if ( result >= v45 + 2 )
                                            {
                                              v35 = sub_4019D0(a2, v45);
                                              memcpy(&v57, (const void *)v35, 2u);
                                              v45 += 2;
                                              result = sub_4019B0(a2);
                                              if ( result >= v45 + v57 )
                                              {
                                                if ( (signed int)v57 <= 1 )
                                                {
                                                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                                                    a3 + 308,
                                                    &unk_43263E);
                                                }
                                                else
                                                {
                                                  v36 = v57 - 1;
                                                  v37 = sub_4019D0(a2, v45);
                                                  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(
                                                    a3 + 308,
                                                    v37,
                                                    v36);
                                                }
                                                v45 += v57;
                                                result = sub_4019B0(a2);
                                                if ( result >= v45 + 2 )
                                                {
                                                  v38 = sub_4019D0(a2, v45);
                                                  memcpy((void *)(a3 + 336), (const void *)v38, 2u);
                                                  v45 += 2;
                                                  result = sub_4019B0(a2);
                                                  if ( result >= v45 + 1 )
                                                  {
                                                    v39 = sub_4019D0(a2, v45);
                                                    memcpy((void *)(a3 + 338), (const void *)v39, 1u);
                                                    ++v45;
                                                    result = sub_4019B0(a2);
                                                    if ( result >= v45 + 1 )
                                                    {
                                                      v40 = sub_4019D0(a2, v45);
                                                      memcpy((void *)(a3 + 339), (const void *)v40, 1u);
                                                      ++v45;
                                                      result = sub_4019B0(a2);
                                                      if ( result >= v45 + 1 )
                                                      {
                                                        v41 = sub_4019D0(a2, v45);
                                                        memcpy((void *)(a3 + 340), (const void *)v41, 1u);
                                                        ++v45;
                                                        result = sub_4019B0(a2);
                                                        if ( result >= v45 + 1 )
                                                        {
                                                          v42 = sub_4019D0(a2, v45);
                                                          memcpy((void *)(a3 + 341), (const void *)v42, 1u);
                                                          ++v45;
                                                          result = sub_4019B0(a2);
                                                          if ( result >= v45 + 1 )
                                                          {
                                                            v43 = sub_4019D0(a2, v45);
                                                            result = (unsigned int)memcpy(
                                                                                     (void *)(a3 + 342),
                                                                                     (const void *)v43,
                                                                                     1u);
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

//----- (0041D270) --------------------------------------------------------
char __thiscall sub_41D270(int this, int a2)
{
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  char result; // al@2
  int v6; // ST20_4@5
  int v7; // eax@5
  int  s; // [sp+44h] [bp+0h]@1
  unsigned int v9; // [sp+30h] [bp-14h]@1
  int v10; // [sp+4h] [bp-40h]@1
  char v11; // [sp+14h] [bp-30h]@1
  signed int v12; // [sp+40h] [bp-4h]@1
  unsigned __int8 v13; // [sp+37h] [bp-Dh]@3
  int v14; // [sp-20h] [bp-64h]@5
  int *v15; // [sp+Ch] [bp-38h]@5
  int v16; // [sp+0h] [bp-44h]@5
  char v17; // [sp+Bh] [bp-39h]@5

  v9 = (unsigned int)& s ^ dword_43901C;
  v10 = this;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    &v11,
    (unsigned int)& s ^ dword_43901C,
    ST24_4_0,
    ST28_4_0,
    ST2C_4_0);
  v12 = 0;
  if ( (unsigned int)sub_4019B0(a2) >= 0xB )
  {
    v13 = *(_BYTE *)sub_4019D0(a2, 0xAu);
    if ( sub_4019B0(a2) >= (unsigned int)v13 + 11 )
    {
      v6 = v13;
      v7 = sub_4019D0(a2, 0xBu);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(&v11, v7, v6);
      sub_4019D0(a2, 0);
      v15 = &v14;
      v16 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v11);
      (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 60))(v10);
      v17 = 1;
      v12 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v11);
      result = v17;
    }
    else
    {
      v12 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v11);
      result = 0;
    }
  }
  else
  {
    v12 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v11);
    result = 0;
  }
  return result;
}

//----- (0041D390) --------------------------------------------------------
char __thiscall sub_41D390(int this, void *a2, int a3, int a4)
{
  char result; // al@2
  __time64_t v5; // qax@1
  int v6; // eax@3
  int v7; // eax@7
  int  s; // [sp+114h] [bp+0h]@1
  unsigned int v9; // [sp+100h] [bp-14h]@1
  int v10; // [sp+4h] [bp-110h]@1
  unsigned __int8 v11; // [sp+107h] [bp-Dh]@5
  int v12; // [sp-24h] [bp-138h]@7
  int *v13; // [sp+Ch] [bp-108h]@7
  int v14; // [sp+0h] [bp-114h]@7
  signed int v15; // [sp+110h] [bp-4h]@9
  char v16; // [sp+10h] [bp-104h]@9
  char v17; // [sp+Bh] [bp-109h]@10
  char v18; // [sp+14h] [bp-100h]@11
  char v19; // [sp+Ah] [bp-10Ah]@13
  char v20; // [sp+40h] [bp-D4h]@14
  char v21; // [sp+38h] [bp-DCh]@18
  char v22; // [sp+3Ch] [bp-D8h]@18
  char v23; // [sp+9h] [bp-10Bh]@18

  v9 = (unsigned int)& s ^ dword_43901C;
  v10 = this;
  v5 = sub_41AB10(0);
  *((_DWORD *)a2 + 22) = v5;
  *((_DWORD *)a2 + 23) = *((_DWORD *)&v5 + 1);
  *((_BYTE *)a2 + 8) = 0;
  if ( (unsigned int)sub_4019B0(a4) >= 0xB )
  {
    v6 = sub_4019D0(a4, 0);
    memcpy(a2, (const void *)v6, 8u);
    *((_BYTE *)a2 + 8) = 1;
    if ( *(_BYTE *)sub_4019D0(a4, 9u) == 2 )
    {
      v11 = *(_BYTE *)sub_4019D0(a4, 0xAu);
      if ( sub_4019B0(a4) >= (unsigned int)v11 + 14 )
      {
        v7 = sub_4019D0(a4, 0xBu);
        std__basic_string_char_std__char_traits_char__std__allocator_char____assign((char *)a2 + 12, v7, v11);
        sub_4019D0(a4, 0);
        v13 = &v12;
        v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 12);
        (*(int (__thiscall **)(int))(*(_DWORD *)v10 + 56))(v10);
        if ( *(_BYTE *)sub_4019D0(a4, v11 + 12) == 3 )
        {
          sub_42B020();
          v15 = 0;
          if ( sub_42B4D0(&v16, a4, v11 + 13) )
          {
            *(_BYTE *)a3 = v18;
            if ( (signed int)*(_BYTE *)a3 >= 232 && (signed int)*(_BYTE *)a3 <= 236 )
            {
              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_((char *)a2 + 40);
              if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                      &v20,
                                      "{0946134E-4C7F-11D1-8222-444553540000}")
                || (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                      &v20,
                                      "{0946134e-4c7f-11d1-8222-444553540000}") )
                *((_DWORD *)a2 + 19) = 3;
              else
                *((_DWORD *)a2 + 19) = 1;
              memcpy((char *)a2 + 68, &v21, 4u);
              memcpy((char *)a2 + 72, &v22, 4u);
              v23 = 1;
              v15 = -1;
              sub_42AF60((int)&v16);
              result = v23;
            }
            else
            {
              v19 = 0;
              v15 = -1;
              sub_42AF60((int)&v16);
              result = v19;
            }
          }
          else
          {
            v17 = 0;
            v15 = -1;
            sub_42AF60((int)&v16);
            result = v17;
          }
        }
        else
        {
          result = 0;
        }
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0041D640) --------------------------------------------------------
char __thiscall sub_41D640(int this, int a2, int a3, int a4, int a5, int a6)
{
  char result; // al@2
  int v7; // eax@7
  int  s; // [sp+10Ch] [bp+0h]@1
  unsigned int v9; // [sp+F8h] [bp-14h]@1
  int v10; // [sp+0h] [bp-10Ch]@1
  unsigned __int8 v11; // [sp+FFh] [bp-Dh]@5
  signed int v12; // [sp+108h] [bp-4h]@9
  char v13; // [sp+8h] [bp-104h]@9
  unsigned int v14; // [sp+BCh] [bp-50h]@13

  v9 = (unsigned int)& s ^ dword_43901C;
  v10 = this;
  if ( (unsigned int)sub_4019B0(a6) >= 0xB )
  {
    if ( *(_BYTE *)sub_4019D0(a6, 9u) == 2 )
    {
      v11 = *(_BYTE *)sub_4019D0(a6, 0xAu);
      if ( sub_4019B0(a6) >= (unsigned int)v11 + 14 )
      {
        v7 = sub_4019D0(a6, 0xBu);
        std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v7, v11);
        if ( *(_BYTE *)sub_4019D0(a6, v11 + 12) == 3 )
        {
          sub_42B020();
          v12 = 0;
          if ( sub_42B4D0(&v13, a6, v11 + 13) )
          {
            if ( sub_42A5E0((int)&v13) )
            {
              if ( v14 <= 0x22 )
              {
                *(_DWORD *)a3 = v14;
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a4);
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a5);
                v12 = -1;
                sub_42AF60((int)&v13);
                result = 1;
              }
              else
              {
                v12 = -1;
                sub_42AF60((int)&v13);
                result = 0;
              }
            }
            else
            {
              v12 = -1;
              sub_42AF60((int)&v13);
              result = 0;
            }
          }
          else
          {
            v12 = -1;
            sub_42AF60((int)&v13);
            result = 0;
          }
        }
        else
        {
          result = 0;
        }
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0041D810) --------------------------------------------------------
char __thiscall sub_41D810(int this, int a2, int a3)
{
  char result; // al@2
  int v4; // eax@5
  int v5; // [sp+0h] [bp-8h]@1
  unsigned __int8 v6; // [sp+7h] [bp-1h]@3

  v5 = this;
  if ( sub_408180(a3) )
  {
    result = 0;
  }
  else
  {
    v6 = *(_BYTE *)sub_4019D0(a3, 0);
    if ( sub_4019B0(a3) >= (unsigned int)v6 + 1 )
    {
      v4 = sub_4019D0(a3, 1u);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v4, v6);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0041D880) --------------------------------------------------------
char __thiscall sub_41D880(int this, int a2, int a3)
{
  char result; // al@2
  int v4; // eax@5
  int v5; // [sp+4h] [bp-Ch]@1
  unsigned int v6; // [sp+8h] [bp-8h]@1
  unsigned int v7; // [sp+0h] [bp-10h]@3
  unsigned __int8 v8; // [sp+Fh] [bp-1h]@3

  v5 = this;
  v6 = 0;
  if ( sub_408180(a3) )
  {
    result = 0;
  }
  else
  {
    v7 = v6;
    v8 = *(_BYTE *)sub_4019D0(a3, v6++);
    if ( sub_4019B0(a3) >= v6 + v8 )
    {
      v4 = sub_4019D0(a3, v6);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v4, v8);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0041D900) --------------------------------------------------------
char __thiscall sub_41D900(int this, int a2, int a3, int a4, int a5)
{
  char result; // al@2
  int v6; // eax@5
  int v7; // eax@7
  int v8; // ST08_4@9
  int v9; // eax@9
  int v10; // [sp+0h] [bp-Ch]@1
  unsigned __int8 v11; // [sp+Bh] [bp-1h]@3
  u_short v12; // [sp+4h] [bp-8h]@7

  v10 = this;
  if ( sub_408180(a5) )
  {
    result = 0;
  }
  else
  {
    v11 = *(_BYTE *)sub_4019D0(a5, 0);
    if ( sub_4019B0(a5) >= (unsigned int)v11 + 2 )
    {
      v6 = sub_4019D0(a5, 1u);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v6, v11);
      *(_BYTE *)a4 = *(_BYTE *)sub_4019D0(a5, v11 + 1);
      if ( sub_4019B0(a5) >= (unsigned int)v11 + 4 )
      {
        v7 = sub_4019D0(a5, v11 + 2);
        memcpy(&v12, (const void *)v7, 2u);
        v12 = ntohs(v12);
        if ( sub_4019B0(a5) >= v11 + (unsigned int)v12 + 4 )
        {
          v8 = v12;
          v9 = sub_4019D0(a5, v11 + 4);
          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3, v9, v8);
          result = 1;
        }
        else
        {
          result = 0;
        }
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0041DA00) --------------------------------------------------------
char __thiscall sub_41DA00(int this, int a2, int a3, int a4)
{
  char result; // al@2
  int v5; // eax@5
  int v6; // eax@7
  int v7; // ST08_4@9
  int v8; // eax@9
  int v9; // [sp+0h] [bp-Ch]@1
  unsigned __int8 v10; // [sp+Bh] [bp-1h]@3
  u_short v11; // [sp+4h] [bp-8h]@7

  v9 = this;
  if ( sub_408180(a4) )
  {
    result = 0;
  }
  else
  {
    v10 = *(_BYTE *)sub_4019D0(a4, 0);
    if ( sub_4019B0(a4) >= (unsigned int)v10 + 1 )
    {
      v5 = sub_4019D0(a4, 1u);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v5, v10);
      if ( sub_4019B0(a4) >= (unsigned int)v10 + 3 )
      {
        v6 = sub_4019D0(a4, v10 + 1);
        memcpy(&v11, (const void *)v6, 2u);
        v11 = ntohs(v11);
        if ( sub_4019B0(a4) >= v10 + (unsigned int)v11 + 3 )
        {
          v7 = v11;
          v8 = sub_4019D0(a4, v10 + 3);
          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a3, v8, v7);
          result = 1;
        }
        else
        {
          result = 0;
        }
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0041DAF0) --------------------------------------------------------
char __thiscall sub_41DAF0(int this, int a2, void *a3, int a4)
{
  char result; // al@2
  int v5; // eax@5
  int v6; // eax@5
  int v7; // [sp+0h] [bp-8h]@1
  int v8; // [sp+4h] [bp-4h]@3

  v7 = this;
  if ( (unsigned int)sub_4019B0(a4) >= 0xD )
  {
    v8 = *(_BYTE *)sub_4019D0(a4, 0xAu);
    if ( sub_4019B0(a4) >= (unsigned int)(v8 + 13) )
    {
      v5 = sub_4019D0(a4, 0xBu);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v5, v8);
      v6 = sub_4019D0(a4, v8 + 11);
      memcpy(a3, (const void *)v6, 2u);
      *(_WORD *)a3 = ntohs(*(_WORD *)a3);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0041DB90) --------------------------------------------------------
unsigned int __thiscall sub_41DB90(int this, int a2, int a3)
{
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  unsigned int result; // eax@1
  unsigned int v6; // ST0C_4@1
  signed int v7; // edx@1
  int v8; // eax@5
  int v9; // eax@9
  int v10; // eax@11
  int v11; // ST08_4@14
  int v12; // eax@14
  int v13; // eax@16
  int  s; // [sp+6Ch] [bp+0h]@1
  unsigned int v15; // [sp+5Ch] [bp-10h]@1
  int v16; // [sp+Ch] [bp-60h]@1
  unsigned int v17; // [sp+38h] [bp-34h]@1
  unsigned __int8 v18; // [sp+3Fh] [bp-2Dh]@5
  char v19; // [sp+40h] [bp-2Ch]@5
  signed int v20; // [sp+68h] [bp-4h]@5
  unsigned int v21; // [sp+34h] [bp-38h]@5
  char v22; // [sp+3Eh] [bp-2Eh]@9
  unsigned __int16 v23; // [sp+30h] [bp-3Ch]@11
  char v24; // [sp+10h] [bp-5Ch]@16

  v15 = (unsigned int)& s ^ dword_43901C;
  v6 = (unsigned int)& s ^ dword_43901C;
  v16 = this;
  sub_408480(a3 + 448);
  v17 = 16;
  v7 = *(_BYTE *)sub_4019D0(a2, 0x10u);
  result = 17;
  v17 = 17;
  if ( v7 == 10 )
  {
    result = sub_4019B0(a2);
    if ( result >= v17 + 1 )
    {
      v8 = sub_4019D0(a2, v17);
      memcpy(&v18, (const void *)v8, 1u);
      ++v17;
      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
        &v19,
        v6,
        ST10_4_0,
        ST14_4_0,
        16);
      v20 = 0;
      v21 = 0;
      while ( v21 < v18 )
      {
        if ( sub_4019B0(a2) < v17 + 1 )
        {
          v20 = -1;
          return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v19);
        }
        v9 = sub_4019D0(a2, v17);
        memcpy(&v22, (const void *)v9, 1u);
        ++v17;
        if ( sub_4019B0(a2) < v17 + 2 )
        {
          v20 = -1;
          return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v19);
        }
        v10 = sub_4019D0(a2, v17);
        memcpy(&v23, (const void *)v10, 2u);
        v17 += 2;
        if ( sub_4019B0(a2) < v17 + v23 )
        {
          v20 = -1;
          return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v19);
        }
        if ( (signed int)v23 <= 1 )
        {
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v19, &unk_43266B);
        }
        else
        {
          v11 = v23 - 1;
          v12 = sub_4019D0(a2, v17);
          std__basic_string_char_std__char_traits_char__std__allocator_char____assign(&v19, v12, v11);
        }
        v17 += v23;
        v13 = sub_409440((int)&v24, (int)&v19, (int)&v22);
        LOBYTE(v20) = 1;
        sub_408400(a3 + 448, v13);
        LOBYTE(v20) = 0;
        sub_4080D0((int)&v24);
        ++v21;
      }
      v20 = -1;
      result = std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v19);
    }
  }
  return result;
}

//----- (0041DDD0) --------------------------------------------------------
signed int __fastcall sub_41DDD0(int a1)
{
  signed int result; // eax@2
  __time64_t v2; // qax@2
  int v3; // [sp+4h] [bp-38h]@1
  char v4; // [sp+10h] [bp-2Ch]@1
  signed int v5; // [sp+38h] [bp-4h]@1
  __int16 v6; // [sp+12h] [bp-2Ah]@1
  signed int v7; // [sp+2Ch] [bp-10h]@3
  signed int v8; // [sp+8h] [bp-34h]@3

  v3 = a1;
  sub_42C1E0((int)&v4);
  v5 = 0;
  v4 = 5;
  v6 = *(_WORD *)(v3 + 604)++;
  (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 4))(v3);
  if ( sub_42C0A0((int)&v4, *(_DWORD *)(v3 + 600)) )
  {
    v2 = sub_41AB10(0);
    *(_DWORD *)(v3 + 776) = v2;
    *(_DWORD *)(v3 + 780) = *((_DWORD *)&v2 + 1);
    v5 = -1;
    sub_42BD10((int)&v4);
    result = 1;
  }
  else
  {
    v8 = v7;
    v5 = -1;
    sub_42BD10((int)&v4);
    result = v8;
  }
  return result;
}

//----- (0041DEC0) --------------------------------------------------------
char __fastcall sub_41DEC0(int a1)
{
  int v2; // [sp+4h] [bp-34h]@1
  char v3; // [sp+Ch] [bp-2Ch]@1
  signed int v4; // [sp+34h] [bp-4h]@1
  __int16 v5; // [sp+Eh] [bp-2Ah]@1
  char v6; // [sp+Bh] [bp-2Dh]@1

  v2 = a1;
  sub_42C1E0((int)&v3);
  v4 = 0;
  v3 = 4;
  v5 = *(_WORD *)(v2 + 604)++;
  v6 = sub_42C0A0((int)&v3, *(_DWORD *)(v2 + 600));
  v4 = -1;
  sub_42BD10((int)&v3);
  return v6;
}

//----- (0041DF60) --------------------------------------------------------
char __thiscall sub_41DF60(int this, int a2, int a3, int a4, int a5)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  char result; // al@2
  int v10; // eax@5
  int v11; // eax@7
  int v12; // ST14_4@7
  int v13; // ST18_4@7
  int v14; // ST1C_4@7
  signed int v15; // eax@7
  int v16; // eax@20
  int v17; // eax@20
  int v18; // eax@21
  int v19; // esi@21
  int v20; // eax@26
  int v21; // eax@31
  int v22; // edx@31
  char v23; // bl@33
  char v24; // bl@35
  char v25; // bl@40
  char v26; // bl@42
  int v27; // eax@46
  int v28; // eax@47
  int v29; // eax@48
  int v30; // eax@48
  int v31; // eax@53
  u_long v32; // esi@53
  int v33; // esi@57
  int v34; // eax@57
  int v35; // esi@57
  int  s; // [sp+B0h] [bp+0h]@1
  unsigned int v37; // [sp+48h] [bp-68h]@1
  int v38; // [sp+18h] [bp-98h]@1
  unsigned int v39; // [sp+98h] [bp-18h]@1
  unsigned int v40; // [sp+14h] [bp-9Ch]@3
  unsigned __int8 v41; // [sp+9Fh] [bp-11h]@3
  u_short v42; // [sp+88h] [bp-28h]@7
  int v43; // [sp+90h] [bp-20h]@7
  u_long netlong; // [sp+94h] [bp-1Ch]@7
  int v45; // [sp+8Ch] [bp-24h]@7
  char *v46; // [sp+30h] [bp-80h]@7
  int v47; // [sp+10h] [bp-A0h]@7
  signed int v48; // [sp+Ch] [bp-A4h]@7
  unsigned int v49; // [sp+A0h] [bp-10h]@7
  signed int v50; // [sp+84h] [bp-2Ch]@9
  unsigned __int16 v51; // [sp+68h] [bp-48h]@11
  signed int v52; // [sp+ACh] [bp-4h]@11
  char v53; // [sp+2Fh] [bp-81h]@12
  char v54; // [sp+6Ch] [bp-44h]@13
  char v55; // [sp+2Eh] [bp-82h]@15
  char v56; // [sp+2Dh] [bp-83h]@19
  u_short v57; // [sp+64h] [bp-4Ch]@21
  char v58; // [sp+2Ch] [bp-84h]@25
  char v59; // [sp+38h] [bp-78h]@29
  char v60; // [sp+39h] [bp-77h]@29
  char v61; // [sp+3Ah] [bp-76h]@29
  char v62; // [sp+3Bh] [bp-75h]@29
  char v63; // [sp+3Ch] [bp-74h]@29
  char v64; // [sp+3Dh] [bp-73h]@29
  char v65; // [sp+3Eh] [bp-72h]@29
  char v66; // [sp+3Fh] [bp-71h]@29
  char v67; // [sp+40h] [bp-70h]@29
  char v68; // [sp+41h] [bp-6Fh]@29
  char v69; // [sp+42h] [bp-6Eh]@29
  char v70; // [sp+43h] [bp-6Dh]@29
  char v71; // [sp+44h] [bp-6Ch]@29
  char v72; // [sp+45h] [bp-6Bh]@29
  char v73; // [sp+46h] [bp-6Ah]@29
  char v74; // [sp+47h] [bp-69h]@29
  char v75; // [sp+4Ch] [bp-64h]@29
  unsigned int v76; // [sp+34h] [bp-7Ch]@29
  char v77; // [sp+1Ch] [bp-94h]@31
  int v78; // [sp+24h] [bp-8Ch]@31
  int v79; // [sp+28h] [bp-88h]@31

  v37 = (unsigned int)& s ^ dword_43901C;
  v38 = this;
  v39 = 0;
  if ( sub_408180(a4) )
  {
    result = 0;
  }
  else
  {
    v40 = v39;
    v41 = *(_BYTE *)sub_4019D0(a4, v39++);
    if ( sub_4019B0(a4) >= v39 + v41 )
    {
      v10 = sub_4019D0(a4, v39);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v10, v41);
      v39 += v41;
      v39 += 2;
      if ( sub_4019B0(a4) >= v39 + 2 )
      {
        v11 = sub_4019D0(a4, v39);
        memcpy(&v42, (const void *)v11, 2u);
        v42 = ntohs(v42);
        v39 += 2;
        *(_DWORD *)a3 = 0;
        v43 = 0;
        netlong = 0;
        v45 = 0;
        v46 = &ST04_1_0;
        v47 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(a2);
        v15 = sub_41ACD0(v38, ST04_1_0, ST08_4_0, ST0C_4_0, ST10_4_0, v12, v13, v14);
        v48 = v15;
        v49 = v15;
        if ( v15 >= 0 )
        {
          *(_BYTE *)(sub_4085D0(v38 + 8, v49) + 104) = 0;
          *(_BYTE *)(sub_4085D0(v38 + 8, v49) + 225) = 0;
          *(_BYTE *)(sub_4085D0(v38 + 8, v49) + 226) = 0;
          *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 376) = 0;
        }
        v50 = 0;
        while ( v50 < v42 )
        {
          sub_42C060((int)&v51);
          v52 = 0;
          if ( !(unsigned __int8)sub_42CE20((int)&v51, a4, v39) )
          {
            v53 = 0;
            v52 = -1;
            sub_42BCD0((int)&v51);
            return v53;
          }
          v39 += sub_4019B0((int)&v54) + 4;
          switch ( v51 )
          {
            case 6u:
              if ( !(unsigned __int8)sub_42BC20((int)&v51, a3) )
              {
                v55 = 0;
                v52 = -1;
                sub_42BCD0((int)&v51);
                return v55;
              }
              break;
            case 0xCu:
              if ( (unsigned int)sub_4019B0((int)&v54) < 0xB )
              {
                v56 = 0;
                v52 = -1;
                sub_42BCD0((int)&v51);
                return v56;
              }
              v16 = sub_4019D0((int)&v54, 0);
              memcpy(&v43, (const void *)v16, 4u);
              v17 = sub_4019D0((int)&v54, 4u);
              memcpy(&netlong, (const void *)v17, 4u);
              if ( (signed int)v49 >= 0 )
              {
                v18 = sub_4019D0((int)&v54, 9u);
                memcpy(&v57, (const void *)v18, 2u);
                v19 = ntohs(v57);
                *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 376) = v19;
              }
              netlong = ntohl(netlong);
              break;
            case 0xAu:
              if ( (unsigned int)sub_4019B0((int)&v54) < 4 )
              {
                v58 = 0;
                v52 = -1;
                sub_42BCD0((int)&v51);
                return v58;
              }
              v20 = sub_4019D0((int)&v54, 0);
              memcpy(&v45, (const void *)v20, 4u);
              break;
            default:
              if ( v51 != 25 || (signed int)v49 < 0 )
              {
                if ( v51 != 13 || (signed int)v49 < 0 )
                {
                  if ( v51 != 3 || (signed int)v49 < 0 || (unsigned int)sub_4019B0((int)&v54) < 4 )
                  {
                    if ( v51 == 4 )
                    {
                      if ( (signed int)v49 >= 0 )
                      {
                        if ( (unsigned int)sub_4019B0((int)&v54) >= 2 )
                        {
                          v33 = sub_41AB10(0);
                          v34 = sub_4019D0((int)&v54, 0);
                          v35 = v33 - 60 * ntohs(*(_WORD *)v34);
                          *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 372) = v35;
                        }
                      }
                    }
                  }
                  else
                  {
                    v31 = sub_4019D0((int)&v54, 0);
                    v32 = ntohl(*(_DWORD *)v31);
                    *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 368) = v32;
                  }
                }
                else
                {
                  if ( !*(_BYTE *)(sub_4085D0(v38 + 8, v49) + 225) )
                  {
                    v25 = sub_41AEF0(v38, (int)&v54);
                    *(_BYTE *)(sub_4085D0(v38 + 8, v49) + 225) = v25;
                  }
                  if ( !*(_BYTE *)(sub_4085D0(v38 + 8, v49) + 226) )
                  {
                    v26 = sub_41AE30(v38, (int)&v54);
                    *(_BYTE *)(sub_4085D0(v38 + 8, v49) + 226) = v26;
                  }
                  if ( !(unsigned __int8)sub_41AD90(v38, (int)&v54, a5) )
                  {
                    *(_DWORD *)a5 = 0;
                    if ( *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 164)
                      || (v27 = sub_4085D0(v38 + 8, v49), (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                                                             v27 + 168,
                                                                             &unk_432553))
                      || (v28 = sub_4085D0(v38 + 8, v49), (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                                                             v28 + 196,
                                                                             &unk_43258E)) )
                    {
                      v29 = sub_4085D0(v38 + 8, v49);
                      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                        v29 + 168,
                        &unk_43258F);
                      v30 = sub_4085D0(v38 + 8, v49);
                      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                        v30 + 196,
                        &unk_4325C6);
                    }
                  }
                }
              }
              else
              {
                v59 = 9;
                v60 = 70;
                v61 = -1;
                v62 = -1;
                v63 = 76;
                v64 = 127;
                v65 = 17;
                v66 = -47;
                v67 = -126;
                v68 = 34;
                v69 = 68;
                v70 = 69;
                v71 = 83;
                v72 = 84;
                v73 = 0;
                v74 = 0;
                sub_401700((int)&v75);
                LOBYTE(v52) = 1;
                v76 = 0;
                while ( v76 < sub_4019B0((int)&v54) )
                {
                  v61 = *(_BYTE *)sub_4019D0((int)&v54, v76);
                  v62 = *(_BYTE *)sub_4019D0((int)&v54, v76 + 1);
                  v21 = sub_40EB60((int)&v75, (int)&v77);
                  v22 = *(_DWORD *)(v21 + 4);
                  v78 = *(_DWORD *)v21;
                  v79 = v22;
                  sub_404CB0((int)&v75, v78, v22, (char)&v59, (char)&v37);
                  v76 += 2;
                }
                if ( !*(_BYTE *)(sub_4085D0(v38 + 8, v49) + 225) )
                {
                  v23 = sub_41AEF0(v38, (int)&v75);
                  *(_BYTE *)(sub_4085D0(v38 + 8, v49) + 225) = v23;
                }
                if ( !*(_BYTE *)(sub_4085D0(v38 + 8, v49) + 226) )
                {
                  v24 = sub_41AE30(v38, (int)&v75);
                  *(_BYTE *)(sub_4085D0(v38 + 8, v49) + 226) = v24;
                }
                LOBYTE(v52) = 0;
                sub_4017F0((int)&v75);
              }
              break;
          }
          v52 = -1;
          sub_42BCD0((int)&v51);
          ++v50;
        }
        if ( v43 || netlong || v45 )
        {
          if ( (signed int)v49 >= 0 )
          {
            if ( v43 )
              *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 92) = v43;
            if ( netlong )
              *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 96) = netlong;
            if ( v45 )
              *(_DWORD *)(sub_4085D0(v38 + 8, v49) + 100) = v45;
          }
        }
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

//----- (0041E760) --------------------------------------------------------
signed int __thiscall sub_41E760(int this, __int16 a2, __int16 a3, int a4, int a5)
{
  signed int result; // eax@6
  __time64_t v6; // qax@8
  int v7; // [sp+4h] [bp-60h]@1
  char v8; // [sp+38h] [bp-2Ch]@1
  signed int v9; // [sp+60h] [bp-4h]@1
  __int16 v10; // [sp+3Ah] [bp-2Ah]@1
  __int16 v11; // [sp+14h] [bp-50h]@1
  __int16 v12; // [sp+16h] [bp-4Eh]@1
  __int16 v13; // [sp+18h] [bp-4Ch]@1
  int v14; // [sp+1Ch] [bp-48h]@1
  char v15; // [sp+20h] [bp-44h]@2
  char v16; // [sp+3Ch] [bp-28h]@5
  signed int v17; // [sp+54h] [bp-10h]@9
  signed int v18; // [sp+8h] [bp-5Ch]@9

  v7 = this;
  sub_42C1E0((int)&v8);
  v9 = 0;
  v8 = 2;
  v10 = *(_WORD *)(v7 + 604)++;
  sub_42C080((int)&v11);
  LOBYTE(v9) = 1;
  v11 = a2;
  v12 = a3;
  v13 = 0;
  v14 = *(_DWORD *)(v7 + 608)++;
  if ( a5 )
    sub_401810((int)&v15, a5);
  if ( a4 )
    *(_DWORD *)a4 = v14;
  sub_42D070((int)&v11, (int)&v16, 0);
  (*(int (__thiscall **)(int))(*(_DWORD *)v7 + 4))(v7);
  if ( *(_BYTE *)(v7 + 768) )
  {
    *(_BYTE *)(v7 + 768) = 0;
    LOBYTE(v9) = 0;
    naticq_event();
    v9 = -1;
    sub_42BD10((int)&v8);
    result = -2;
  }
  else
  {
    if ( sub_42C0A0((int)&v8, *(_DWORD *)(v7 + 600)) )
    {
      v6 = sub_41AB10(0);
      *(_DWORD *)(v7 + 776) = v6;
      *(_DWORD *)(v7 + 780) = *((_DWORD *)&v6 + 1);
      LOBYTE(v9) = 0;
      naticq_event();
      v9 = -1;
      sub_42BD10((int)&v8);
      result = 1;
    }
    else
    {
      v18 = v17;
      LOBYTE(v9) = 0;
      naticq_event();
      v9 = -1;
      sub_42BD10((int)&v8);
      result = v18;
    }
  }
  return result;
}

//----- (0041E910) --------------------------------------------------------
char __fastcall sub_41E910(int a1)
{
  int v2; // [sp+4h] [bp-CCh]@1
  char v3; // [sp+ACh] [bp-24h]@1
  signed int v4; // [sp+CCh] [bp-4h]@1
  char v5; // [sp+ABh] [bp-25h]@1
  unsigned int v6; // [sp+A0h] [bp-30h]@1
  __int16 v7; // [sp+A4h] [bp-2Ch]@4
  char v8; // [sp+4Bh] [bp-85h]@7
  char v9; // [sp+4Ah] [bp-86h]@7
  char v10; // [sp+49h] [bp-87h]@7
  char v11; // [sp+48h] [bp-88h]@7
  char v12; // [sp+47h] [bp-89h]@7
  char v13; // [sp+46h] [bp-8Ah]@7
  char v14; // [sp+45h] [bp-8Bh]@7
  char v15; // [sp+44h] [bp-8Ch]@7
  char v16; // [sp+9Fh] [bp-31h]@8
  unsigned int v17; // [sp+94h] [bp-3Ch]@8
  __int16 v18; // [sp+98h] [bp-38h]@11
  char v19; // [sp+43h] [bp-8Dh]@14
  char v20; // [sp+42h] [bp-8Eh]@14
  char v21; // [sp+41h] [bp-8Fh]@14
  char v22; // [sp+40h] [bp-90h]@14
  char v23; // [sp+3Fh] [bp-91h]@14
  char v24; // [sp+3Eh] [bp-92h]@14
  char v25; // [sp+3Dh] [bp-93h]@14
  char v26; // [sp+3Ch] [bp-94h]@14
  char v27; // [sp+93h] [bp-3Dh]@15
  unsigned int v28; // [sp+88h] [bp-48h]@15
  __int16 v29; // [sp+8Ch] [bp-44h]@18
  char v30; // [sp+3Bh] [bp-95h]@21
  char v31; // [sp+3Ah] [bp-96h]@21
  char v32; // [sp+39h] [bp-97h]@21
  char v33; // [sp+38h] [bp-98h]@21
  char v34; // [sp+37h] [bp-99h]@21
  char v35; // [sp+36h] [bp-9Ah]@21
  char v36; // [sp+35h] [bp-9Bh]@21
  char v37; // [sp+34h] [bp-9Ch]@21
  char v38; // [sp+87h] [bp-49h]@22
  unsigned int v39; // [sp+7Ch] [bp-54h]@22
  __int16 v40; // [sp+80h] [bp-50h]@25
  char v41; // [sp+33h] [bp-9Dh]@28
  char v42; // [sp+32h] [bp-9Eh]@28
  char v43; // [sp+31h] [bp-9Fh]@28
  char v44; // [sp+30h] [bp-A0h]@28
  char v45; // [sp+2Fh] [bp-A1h]@28
  char v46; // [sp+2Eh] [bp-A2h]@28
  char v47; // [sp+2Dh] [bp-A3h]@28
  char v48; // [sp+2Ch] [bp-A4h]@28
  char v49; // [sp+7Bh] [bp-55h]@29
  unsigned int v50; // [sp+70h] [bp-60h]@29
  __int16 v51; // [sp+74h] [bp-5Ch]@32
  char v52; // [sp+2Bh] [bp-A5h]@35
  char v53; // [sp+2Ah] [bp-A6h]@35
  char v54; // [sp+29h] [bp-A7h]@35
  char v55; // [sp+28h] [bp-A8h]@35
  char v56; // [sp+27h] [bp-A9h]@35
  char v57; // [sp+26h] [bp-AAh]@35
  char v58; // [sp+25h] [bp-ABh]@35
  char v59; // [sp+24h] [bp-ACh]@35
  char v60; // [sp+6Fh] [bp-61h]@36
  unsigned int v61; // [sp+64h] [bp-6Ch]@36
  __int16 v62; // [sp+68h] [bp-68h]@39
  char v63; // [sp+23h] [bp-ADh]@42
  char v64; // [sp+22h] [bp-AEh]@42
  char v65; // [sp+21h] [bp-AFh]@42
  char v66; // [sp+20h] [bp-B0h]@42
  char v67; // [sp+1Fh] [bp-B1h]@42
  char v68; // [sp+1Eh] [bp-B2h]@42
  char v69; // [sp+1Dh] [bp-B3h]@42
  char v70; // [sp+1Ch] [bp-B4h]@42
  char v71; // [sp+63h] [bp-6Dh]@43
  unsigned int v72; // [sp+58h] [bp-78h]@43
  __int16 v73; // [sp+5Ch] [bp-74h]@46
  char v74; // [sp+1Bh] [bp-B5h]@49
  char v75; // [sp+1Ah] [bp-B6h]@49
  char v76; // [sp+19h] [bp-B7h]@49
  char v77; // [sp+18h] [bp-B8h]@49
  char v78; // [sp+17h] [bp-B9h]@49
  char v79; // [sp+16h] [bp-BAh]@49
  char v80; // [sp+15h] [bp-BBh]@49
  char v81; // [sp+14h] [bp-BCh]@49
  char v82; // [sp+57h] [bp-79h]@50
  unsigned int v83; // [sp+4Ch] [bp-84h]@50
  __int16 v84; // [sp+50h] [bp-80h]@53
  char v85; // [sp+13h] [bp-BDh]@56
  char v86; // [sp+12h] [bp-BEh]@56
  char v87; // [sp+11h] [bp-BFh]@56
  char v88; // [sp+10h] [bp-C0h]@56
  char v89; // [sp+Fh] [bp-C1h]@56
  char v90; // [sp+Eh] [bp-C2h]@56
  char v91; // [sp+Dh] [bp-C3h]@56
  char v92; // [sp+Ch] [bp-C4h]@56
  char v93; // [sp+Bh] [bp-C5h]@57

  v2 = a1;
  sub_401700((int)&v3);
  v4 = 0;
  v5 = 0;
  v6 = 0;
  while ( v6 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v6) == 1 )
    {
      v7 = *(_WORD *)(sub_408A80(v2 + 612, v6) + 2);
      v5 = 1;
      break;
    }
    ++v6;
  }
  if ( v5 )
  {
    v8 = 0;
    sub_4081A0((int)&v3, (int)&v8);
    v9 = 1;
    sub_4081A0((int)&v3, (int)&v9);
    v10 = 0;
    sub_4081A0((int)&v3, (int)&v10);
    v11 = v7;
    sub_4081A0((int)&v3, (int)&v11);
    v12 = 1;
    sub_4081A0((int)&v3, (int)&v12);
    v13 = 16;
    sub_4081A0((int)&v3, (int)&v13);
    v14 = 8;
    sub_4081A0((int)&v3, (int)&v14);
    v15 = -28;
    sub_4081A0((int)&v3, (int)&v15);
  }
  v16 = 0;
  v17 = 0;
  while ( v17 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v17) == 19 )
    {
      v18 = *(_WORD *)(sub_408A80(v2 + 612, v17) + 2);
      v16 = 1;
      break;
    }
    ++v17;
  }
  if ( v16 )
  {
    v19 = 0;
    sub_4081A0((int)&v3, (int)&v19);
    v20 = 19;
    sub_4081A0((int)&v3, (int)&v20);
    v21 = 0;
    sub_4081A0((int)&v3, (int)&v21);
    v22 = v18;
    sub_4081A0((int)&v3, (int)&v22);
    v23 = 1;
    sub_4081A0((int)&v3, (int)&v23);
    v24 = 16;
    sub_4081A0((int)&v3, (int)&v24);
    v25 = 8;
    sub_4081A0((int)&v3, (int)&v25);
    v26 = -28;
    sub_4081A0((int)&v3, (int)&v26);
  }
  v27 = 0;
  v28 = 0;
  while ( v28 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v28) == 2 )
    {
      v29 = *(_WORD *)(sub_408A80(v2 + 612, v28) + 2);
      v27 = 1;
      break;
    }
    ++v28;
  }
  if ( v27 )
  {
    v30 = 0;
    sub_4081A0((int)&v3, (int)&v30);
    v31 = 2;
    sub_4081A0((int)&v3, (int)&v31);
    v32 = 0;
    sub_4081A0((int)&v3, (int)&v32);
    v33 = v29;
    sub_4081A0((int)&v3, (int)&v33);
    v34 = 1;
    sub_4081A0((int)&v3, (int)&v34);
    v35 = 16;
    sub_4081A0((int)&v3, (int)&v35);
    v36 = 8;
    sub_4081A0((int)&v3, (int)&v36);
    v37 = -28;
    sub_4081A0((int)&v3, (int)&v37);
  }
  v38 = 0;
  v39 = 0;
  while ( v39 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v39) == 3 )
    {
      v40 = *(_WORD *)(sub_408A80(v2 + 612, v39) + 2);
      v38 = 1;
      break;
    }
    ++v39;
  }
  if ( v38 )
  {
    v41 = 0;
    sub_4081A0((int)&v3, (int)&v41);
    v42 = 3;
    sub_4081A0((int)&v3, (int)&v42);
    v43 = 0;
    sub_4081A0((int)&v3, (int)&v43);
    v44 = v40;
    sub_4081A0((int)&v3, (int)&v44);
    v45 = 1;
    sub_4081A0((int)&v3, (int)&v45);
    v46 = 16;
    sub_4081A0((int)&v3, (int)&v46);
    v47 = 8;
    sub_4081A0((int)&v3, (int)&v47);
    v48 = -28;
    sub_4081A0((int)&v3, (int)&v48);
  }
  v49 = 0;
  v50 = 0;
  while ( v50 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v50) == 21 )
    {
      v51 = *(_WORD *)(sub_408A80(v2 + 612, v50) + 2);
      v49 = 1;
      break;
    }
    ++v50;
  }
  if ( v49 )
  {
    v52 = 0;
    sub_4081A0((int)&v3, (int)&v52);
    v53 = 21;
    sub_4081A0((int)&v3, (int)&v53);
    v54 = 0;
    sub_4081A0((int)&v3, (int)&v54);
    v55 = v51;
    sub_4081A0((int)&v3, (int)&v55);
    v56 = 1;
    sub_4081A0((int)&v3, (int)&v56);
    v57 = 16;
    sub_4081A0((int)&v3, (int)&v57);
    v58 = 8;
    sub_4081A0((int)&v3, (int)&v58);
    v59 = -28;
    sub_4081A0((int)&v3, (int)&v59);
  }
  v60 = 0;
  v61 = 0;
  while ( v61 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v61) == 4 )
    {
      v62 = *(_WORD *)(sub_408A80(v2 + 612, v61) + 2);
      v60 = 1;
      break;
    }
    ++v61;
  }
  if ( v60 )
  {
    v63 = 0;
    sub_4081A0((int)&v3, (int)&v63);
    v64 = 4;
    sub_4081A0((int)&v3, (int)&v64);
    v65 = 0;
    sub_4081A0((int)&v3, (int)&v65);
    v66 = v62;
    sub_4081A0((int)&v3, (int)&v66);
    v67 = 1;
    sub_4081A0((int)&v3, (int)&v67);
    v68 = 16;
    sub_4081A0((int)&v3, (int)&v68);
    v69 = 8;
    sub_4081A0((int)&v3, (int)&v69);
    v70 = -28;
    sub_4081A0((int)&v3, (int)&v70);
  }
  v71 = 0;
  v72 = 0;
  while ( v72 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v72) == 9 )
    {
      v73 = *(_WORD *)(sub_408A80(v2 + 612, v72) + 2);
      v71 = 1;
      break;
    }
    ++v72;
  }
  if ( v71 )
  {
    v74 = 0;
    sub_4081A0((int)&v3, (int)&v74);
    v75 = 9;
    sub_4081A0((int)&v3, (int)&v75);
    v76 = 0;
    sub_4081A0((int)&v3, (int)&v76);
    v77 = v73;
    sub_4081A0((int)&v3, (int)&v77);
    v78 = 1;
    sub_4081A0((int)&v3, (int)&v78);
    v79 = 16;
    sub_4081A0((int)&v3, (int)&v79);
    v80 = 8;
    sub_4081A0((int)&v3, (int)&v80);
    v81 = -28;
    sub_4081A0((int)&v3, (int)&v81);
  }
  v82 = 0;
  v83 = 0;
  while ( v83 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v83) == 16 )
    {
      v84 = *(_WORD *)(sub_408A80(v2 + 612, v83) + 2);
      v82 = 1;
      break;
    }
    ++v83;
  }
  if ( v82 )
  {
    v85 = 0;
    sub_4081A0((int)&v3, (int)&v85);
    v86 = 16;
    sub_4081A0((int)&v3, (int)&v86);
    v87 = 0;
    sub_4081A0((int)&v3, (int)&v87);
    v88 = v84;
    sub_4081A0((int)&v3, (int)&v88);
    v89 = 1;
    sub_4081A0((int)&v3, (int)&v89);
    v90 = 16;
    sub_4081A0((int)&v3, (int)&v90);
    v91 = 8;
    sub_4081A0((int)&v3, (int)&v91);
    v92 = -28;
    sub_4081A0((int)&v3, (int)&v92);
  }
  v93 = sub_41E760(v2, 1, 2, 0, (int)&v3) == 1;
  v4 = -1;
  sub_4017F0((int)&v3);
  return v93;
}

//----- (0041F310) --------------------------------------------------------
bool __fastcall sub_41F310(int a1)
{
  return sub_41E760(a1, 19, 7, 0, 0) == 1;
}

//----- (0041F340) --------------------------------------------------------
bool __thiscall sub_41F340(int this, int a2)
{
  return sub_41E760(this, 19, 4, a2, 0) == 1;
}

//----- (0041F370) --------------------------------------------------------
bool __thiscall sub_41F370(int this, int a2)
{
  return sub_41E760(this, 19, 2, a2, 0) == 1;
}

//----- (0041F3A0) --------------------------------------------------------
bool __thiscall sub_41F3A0(int this, int a2)
{
  return sub_41E760(this, 9, 2, a2, 0) == 1;
}

//----- (0041F3D0) --------------------------------------------------------
char __fastcall sub_41F3D0(int a1)
{
  char result; // al@2
  int v2; // [sp+4h] [bp-3Ch]@1
  signed int v3; // [sp+3Ch] [bp-4h]@1
  __int16 v4; // [sp+Ch] [bp-34h]@1
  signed int v5; // [sp+10h] [bp-30h]@1
  __int16 v6; // [sp+14h] [bp-2Ch]@1
  __int16 v7; // [sp+16h] [bp-2Ah]@1
  __int16 v8; // [sp+18h] [bp-28h]@1
  __int16 v9; // [sp+1Ah] [bp-26h]@1
  char v10; // [sp+1Ch] [bp-24h]@1

  v2 = a1;
  _LocaleUpdate__GetLocaleT();
  v3 = 0;
  v4 = 1;
  v5 = 11;
  v6 = 8000;
  v7 = 999;
  v8 = 999;
  v9 = 0;
  sub_401700((int)&v10);
  LOBYTE(v3) = 1;
  sub_42C200((int)&v4, (int)&v10, 0);
  if ( sub_41E760(v2, 4, 2, 0, (int)&v10) == 1 )
  {
    sub_401A00((int)&v10);
    v4 = 2;
    v5 = 3;
    v6 = 8000;
    v7 = 999;
    v8 = 999;
    v9 = 0;
    sub_42C200((int)&v4, (int)&v10, 0);
    if ( sub_41E760(v2, 4, 2, 0, (int)&v10) == 1 )
    {
      sub_401A00((int)&v10);
      v4 = 4;
      v5 = 3;
      v6 = 8000;
      v7 = 999;
      v8 = 999;
      v9 = 0;
      sub_42C200((int)&v4, (int)&v10, 0);
      if ( sub_41E760(v2, 4, 2, 0, (int)&v10) == 1 )
      {
        LOBYTE(v3) = 0;
        sub_4017F0((int)&v10);
        v3 = -1;
        std___Init_locks____Init_locks();
        result = 1;
      }
      else
      {
        LOBYTE(v3) = 0;
        sub_4017F0((int)&v10);
        v3 = -1;
        std___Init_locks____Init_locks();
        result = 0;
      }
    }
    else
    {
      LOBYTE(v3) = 0;
      sub_4017F0((int)&v10);
      v3 = -1;
      std___Init_locks____Init_locks();
      result = 0;
    }
  }
  else
  {
    LOBYTE(v3) = 0;
    sub_4017F0((int)&v10);
    v3 = -1;
    std___Init_locks____Init_locks();
    result = 0;
  }
  return result;
}

//----- (0041F5D0) --------------------------------------------------------
bool __thiscall sub_41F5D0(int this, int a2)
{
  return sub_41E760(this, 4, 4, a2, 0) == 1;
}

//----- (0041F600) --------------------------------------------------------
bool __thiscall sub_41F600(int this, int a2)
{
  return sub_41E760(this, 3, 2, a2, 0) == 1;
}

//----- (0041F630) --------------------------------------------------------
char __fastcall sub_41F630(int a1)
{
  size_t v1; // edx@1
  int v3; // eax@1
  int v4; // ST08_4@5
  int v5; // eax@5
  int v6; // eax@6
  int v7; // eax@9
  int v8; // edx@9
  int  s; // [sp+C8h] [bp+0h]@1
  unsigned int v10; // [sp+80h] [bp-48h]@1
  int v11; // [sp+4h] [bp-C4h]@1
  char v12; // [sp+1Ch] [bp-ACh]@1
  char v13; // [sp+1Dh] [bp-ABh]@1
  char v14; // [sp+1Eh] [bp-AAh]@1
  char v15; // [sp+1Fh] [bp-A9h]@1
  char v16; // [sp+20h] [bp-A8h]@1
  char v17; // [sp+21h] [bp-A7h]@1
  char v18; // [sp+22h] [bp-A6h]@1
  char v19; // [sp+23h] [bp-A5h]@1
  char v20; // [sp+24h] [bp-A4h]@1
  char v21; // [sp+25h] [bp-A3h]@1
  char v22; // [sp+26h] [bp-A2h]@1
  char v23; // [sp+27h] [bp-A1h]@1
  char v24; // [sp+28h] [bp-A0h]@1
  char v25; // [sp+29h] [bp-9Fh]@1
  char v26; // [sp+2Ah] [bp-9Eh]@1
  char v27; // [sp+2Bh] [bp-9Dh]@1
  char v28; // [sp+2Ch] [bp-9Ch]@1
  char v29; // [sp+2Dh] [bp-9Bh]@1
  char v30; // [sp+2Eh] [bp-9Ah]@1
  char v31; // [sp+2Fh] [bp-99h]@1
  char v32; // [sp+30h] [bp-98h]@1
  char v33; // [sp+31h] [bp-97h]@1
  char v34; // [sp+32h] [bp-96h]@1
  char v35; // [sp+33h] [bp-95h]@1
  char v36; // [sp+34h] [bp-94h]@1
  char v37; // [sp+35h] [bp-93h]@1
  char v38; // [sp+36h] [bp-92h]@1
  char v39; // [sp+37h] [bp-91h]@1
  char v40; // [sp+38h] [bp-90h]@1
  char v41; // [sp+39h] [bp-8Fh]@1
  char v42; // [sp+3Ah] [bp-8Eh]@1
  char v43; // [sp+3Bh] [bp-8Dh]@1
  char v44; // [sp+3Ch] [bp-8Ch]@1
  char v45; // [sp+3Dh] [bp-8Bh]@1
  char v46; // [sp+3Eh] [bp-8Ah]@1
  char v47; // [sp+3Fh] [bp-89h]@1
  char v48; // [sp+40h] [bp-88h]@1
  char v49; // [sp+41h] [bp-87h]@1
  char v50; // [sp+42h] [bp-86h]@1
  char v51; // [sp+43h] [bp-85h]@1
  char v52; // [sp+44h] [bp-84h]@1
  char v53; // [sp+45h] [bp-83h]@1
  char v54; // [sp+46h] [bp-82h]@1
  char v55; // [sp+47h] [bp-81h]@1
  char v56; // [sp+48h] [bp-80h]@1
  char v57; // [sp+49h] [bp-7Fh]@1
  char v58; // [sp+4Ah] [bp-7Eh]@1
  char v59; // [sp+4Bh] [bp-7Dh]@1
  char v60; // [sp+4Ch] [bp-7Ch]@1
  char v61; // [sp+4Dh] [bp-7Bh]@1
  char v62; // [sp+4Eh] [bp-7Ah]@1
  char v63; // [sp+4Fh] [bp-79h]@1
  char v64; // [sp+50h] [bp-78h]@1
  char v65; // [sp+51h] [bp-77h]@1
  char v66; // [sp+52h] [bp-76h]@1
  char v67; // [sp+53h] [bp-75h]@1
  char v68; // [sp+54h] [bp-74h]@1
  char v69; // [sp+55h] [bp-73h]@1
  char v70; // [sp+56h] [bp-72h]@1
  char v71; // [sp+57h] [bp-71h]@1
  char v72; // [sp+58h] [bp-70h]@1
  char v73; // [sp+59h] [bp-6Fh]@1
  char v74; // [sp+5Ah] [bp-6Eh]@1
  char v75; // [sp+5Bh] [bp-6Dh]@1
  char v76; // [sp+5Ch] [bp-6Ch]@1
  char v77; // [sp+5Dh] [bp-6Bh]@1
  char v78; // [sp+5Eh] [bp-6Ah]@1
  char v79; // [sp+5Fh] [bp-69h]@1
  char v80; // [sp+60h] [bp-68h]@1
  char v81; // [sp+61h] [bp-67h]@1
  char v82; // [sp+62h] [bp-66h]@1
  char v83; // [sp+63h] [bp-65h]@1
  char v84; // [sp+64h] [bp-64h]@1
  char v85; // [sp+65h] [bp-63h]@1
  char v86; // [sp+66h] [bp-62h]@1
  char v87; // [sp+67h] [bp-61h]@1
  char v88; // [sp+68h] [bp-60h]@1
  char v89; // [sp+69h] [bp-5Fh]@1
  char v90; // [sp+6Ah] [bp-5Eh]@1
  char v91; // [sp+6Bh] [bp-5Dh]@1
  char v92; // [sp+6Ch] [bp-5Ch]@1
  char v93; // [sp+6Dh] [bp-5Bh]@1
  char v94; // [sp+6Eh] [bp-5Ah]@1
  char v95; // [sp+6Fh] [bp-59h]@1
  char v96; // [sp+70h] [bp-58h]@1
  char v97; // [sp+71h] [bp-57h]@1
  char v98; // [sp+72h] [bp-56h]@1
  char v99; // [sp+73h] [bp-55h]@1
  char v100; // [sp+74h] [bp-54h]@1
  char v101; // [sp+75h] [bp-53h]@1
  char v102; // [sp+76h] [bp-52h]@1
  char v103; // [sp+77h] [bp-51h]@1
  char v104; // [sp+78h] [bp-50h]@1
  char v105; // [sp+79h] [bp-4Fh]@1
  char v106; // [sp+7Ah] [bp-4Eh]@1
  char v107; // [sp+7Bh] [bp-4Dh]@1
  char v108; // [sp+88h] [bp-40h]@1
  char v109; // [sp+7Ch] [bp-4Ch]@1
  signed int v110; // [sp+C4h] [bp-4h]@1
  size_t v111; // [sp+84h] [bp-44h]@1
  size_t v112; // [sp+0h] [bp-C8h]@3
  char v113; // [sp+Ch] [bp-BCh]@9
  int v114; // [sp+14h] [bp-B4h]@9
  int v115; // [sp+18h] [bp-B0h]@9
  char v116; // [sp+A0h] [bp-28h]@10
  char v117; // [sp+Bh] [bp-BDh]@10

  v10 = (unsigned int)& s ^ dword_43901C;
  v11 = a1;
  v12 = 86;
  v13 = 63;
  v14 = -56;
  v15 = 9;
  v16 = 11;
  v17 = 111;
  v18 = 65;
  v19 = -67;
  v20 = -97;
  v21 = 121;
  v22 = 66;
  v23 = 38;
  v24 = 9;
  v25 = -33;
  v26 = -94;
  v27 = -13;
  v28 = 9;
  v29 = 70;
  v30 = 19;
  v31 = 73;
  v32 = 76;
  v33 = 127;
  v34 = 17;
  v35 = -47;
  v36 = -126;
  v37 = 34;
  v38 = 68;
  v39 = 69;
  v40 = 83;
  v41 = 84;
  v42 = 0;
  v43 = 0;
  v44 = 9;
  v45 = 70;
  v46 = 19;
  v47 = 78;
  v48 = 76;
  v49 = 127;
  v50 = 17;
  v51 = -47;
  v52 = -126;
  v53 = 34;
  v54 = 68;
  v55 = 69;
  v56 = 83;
  v57 = 84;
  v58 = 0;
  v59 = 0;
  v60 = 9;
  v61 = 70;
  v62 = 0;
  v63 = 0;
  v64 = 76;
  v65 = 127;
  v66 = 17;
  v67 = -47;
  v68 = -126;
  v69 = 34;
  v70 = 68;
  v71 = 69;
  v72 = 83;
  v73 = 84;
  v74 = 0;
  v75 = 0;
  v76 = 26;
  v77 = 9;
  v78 = 60;
  v79 = 108;
  v80 = -41;
  v81 = -3;
  v82 = 78;
  v83 = -59;
  v84 = -99;
  v85 = 81;
  v86 = -90;
  v87 = 71;
  v88 = 78;
  v89 = 52;
  v90 = -11;
  v91 = -96;
  v92 = 78;
  v93 = 97;
  v94 = 116;
  v95 = 73;
  v96 = 67;
  v97 = 81;
  v98 = 1;
  v99 = 0;
  v100 = 0;
  v101 = 0;
  v102 = 0;
  v103 = 0;
  v104 = 0;
  v105 = 0;
  v106 = 0;
  v107 = 0;
  sub_412520((int)&v108, (char)&v12, (char)&v109);
  v110 = 0;
  v3 = std__basic_string_char_std__char_traits_char__std__allocator_char____size(v11 + 292);
  v111 = v3;
  if ( v3 <= 0 )
  {
    v6 = sub_4019D0((int)&v108, 0x58u);
    memcpy((void *)v6, "Unknown!", 8u);
  }
  else
  {
    if ( (signed int)v111 <= 8 )
    {
      v1 = v111;
      v112 = v111;
    }
    else
    {
      v112 = 8;
    }
    v4 = std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(v11 + 292, v1, 0);
    v5 = sub_4019D0((int)&v108, 0x58u);
    memcpy((void *)v5, (const void *)v4, v112);
  }
  if ( *(_DWORD *)(v11 + 352) )
  {
    if ( *(_DWORD *)(v11 + 352) <= 0x22u )
    {
      v7 = sub_40EB60((int)&v108, (int)&v113);
      v8 = *(_DWORD *)(v7 + 4);
      v114 = *(_DWORD *)v7;
      v115 = v8;
      sub_404CB0(
        (int)&v108,
        v114,
        v8,
        (unsigned int)&stru_4327C0[*(_DWORD *)(v11 + 352) - 1],
        (unsigned int)&stru_4327D0[*(_DWORD *)(v11 + 352) - 1]);
    }
  }
  sub_4014E0((int)&v116, (int)&v108, 5);
  LOBYTE(v110) = 1;
  sub_401A00((int)&v108);
  sub_42CD30((u_short *)&v116, (int)&v108, 0);
  v117 = sub_41E760(v11, 2, 4, 0, (int)&v108) == 1;
  LOBYTE(v110) = 0;
  sub_42BCD0((int)&v116);
  v110 = -1;
  sub_4017F0((int)&v108);
  return v117;
}

//----- (0041FA10) --------------------------------------------------------
bool __thiscall sub_41FA10(int this, int a2)
{
  return sub_41E760(this, 2, 2, a2, 0) == 1;
}

//----- (0041FA40) --------------------------------------------------------
bool __thiscall sub_41FA40(int this, int a2)
{
  return sub_41E760(this, 1, 14, a2, 0) == 1;
}

//----- (0041FA70) --------------------------------------------------------
char __fastcall sub_41FA70(int a1)
{
  int v2; // eax@1
  int v3; // eax@3
  int v4; // eax@3
  int v5; // [sp+4h] [bp-38h]@1
  char v6; // [sp+18h] [bp-24h]@1
  signed int v7; // [sp+38h] [bp-4h]@1
  unsigned int v8; // [sp+14h] [bp-28h]@1
  unsigned int v9; // [sp+10h] [bp-2Ch]@1
  u_short v10; // [sp+Ch] [bp-30h]@3
  char v11; // [sp+Bh] [bp-31h]@4

  v5 = a1;
  v2 = sub_408C20(a1 + 636);
  sub_401770((int)&v6, 2 * v2);
  v7 = 0;
  v8 = 0;
  v9 = 0;
  while ( v9 < sub_408C20(v5 + 636) )
  {
    v3 = sub_408C40(v5 + 636, v9);
    v10 = htons(*(_WORD *)v3);
    v4 = sub_4019D0((int)&v6, v8);
    memcpy((void *)v4, &v10, 2u);
    v8 += 2;
    ++v9;
  }
  v11 = sub_41E760(v5, 1, 8, 0, (int)&v6) == 1;
  v7 = -1;
  sub_4017F0((int)&v6);
  return v11;
}

//----- (0041FB70) --------------------------------------------------------
bool __thiscall sub_41FB70(int this, int a2)
{
  return sub_41E760(this, 1, 6, a2, 0) == 1;
}

//----- (0041FBA0) --------------------------------------------------------
char __fastcall sub_41FBA0(int a1)
{
  int v2; // [sp+4h] [bp-8Ch]@1
  char v3; // [sp+6Ch] [bp-24h]@1
  signed int v4; // [sp+8Ch] [bp-4h]@1
  char v5; // [sp+6Bh] [bp-25h]@1
  unsigned int v6; // [sp+64h] [bp-2Ch]@1
  char v7; // [sp+2Bh] [bp-65h]@7
  char v8; // [sp+2Ah] [bp-66h]@7
  char v9; // [sp+29h] [bp-67h]@7
  char v10; // [sp+28h] [bp-68h]@7
  char v11; // [sp+63h] [bp-2Dh]@8
  unsigned int v12; // [sp+5Ch] [bp-34h]@8
  char v13; // [sp+27h] [bp-69h]@14
  char v14; // [sp+26h] [bp-6Ah]@14
  char v15; // [sp+25h] [bp-6Bh]@14
  char v16; // [sp+24h] [bp-6Ch]@14
  char v17; // [sp+5Bh] [bp-35h]@15
  unsigned int v18; // [sp+54h] [bp-3Ch]@15
  char v19; // [sp+23h] [bp-6Dh]@21
  char v20; // [sp+22h] [bp-6Eh]@21
  char v21; // [sp+21h] [bp-6Fh]@21
  char v22; // [sp+20h] [bp-70h]@21
  char v23; // [sp+53h] [bp-3Dh]@22
  unsigned int v24; // [sp+4Ch] [bp-44h]@22
  char v25; // [sp+1Fh] [bp-71h]@28
  char v26; // [sp+1Eh] [bp-72h]@28
  char v27; // [sp+1Dh] [bp-73h]@28
  char v28; // [sp+1Ch] [bp-74h]@28
  char v29; // [sp+4Bh] [bp-45h]@29
  unsigned int v30; // [sp+44h] [bp-4Ch]@29
  char v31; // [sp+1Bh] [bp-75h]@35
  char v32; // [sp+1Ah] [bp-76h]@35
  char v33; // [sp+19h] [bp-77h]@35
  char v34; // [sp+18h] [bp-78h]@35
  char v35; // [sp+43h] [bp-4Dh]@36
  unsigned int v36; // [sp+3Ch] [bp-54h]@36
  char v37; // [sp+17h] [bp-79h]@42
  char v38; // [sp+16h] [bp-7Ah]@42
  char v39; // [sp+15h] [bp-7Bh]@42
  char v40; // [sp+14h] [bp-7Ch]@42
  char v41; // [sp+3Bh] [bp-55h]@43
  unsigned int v42; // [sp+34h] [bp-5Ch]@43
  char v43; // [sp+13h] [bp-7Dh]@49
  char v44; // [sp+12h] [bp-7Eh]@49
  char v45; // [sp+11h] [bp-7Fh]@49
  char v46; // [sp+10h] [bp-80h]@49
  char v47; // [sp+33h] [bp-5Dh]@50
  unsigned int v48; // [sp+2Ch] [bp-64h]@50
  char v49; // [sp+Fh] [bp-81h]@56
  char v50; // [sp+Eh] [bp-82h]@56
  char v51; // [sp+Dh] [bp-83h]@56
  char v52; // [sp+Ch] [bp-84h]@56
  char v53; // [sp+Bh] [bp-85h]@57

  v2 = a1;
  sub_401700((int)&v3);
  v4 = 0;
  v5 = 0;
  v6 = 0;
  while ( v6 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v6) == 1 )
    {
      v5 = 1;
      break;
    }
    ++v6;
  }
  if ( v5 )
  {
    v7 = 0;
    sub_4081A0((int)&v3, (int)&v7);
    v8 = 1;
    sub_4081A0((int)&v3, (int)&v8);
    v9 = 0;
    sub_4081A0((int)&v3, (int)&v9);
    v10 = 4;
    sub_4081A0((int)&v3, (int)&v10);
  }
  v11 = 0;
  v12 = 0;
  while ( v12 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v12) == 19 )
    {
      v11 = 1;
      break;
    }
    ++v12;
  }
  if ( v11 )
  {
    v13 = 0;
    sub_4081A0((int)&v3, (int)&v13);
    v14 = 19;
    sub_4081A0((int)&v3, (int)&v14);
    v15 = 0;
    sub_4081A0((int)&v3, (int)&v15);
    v16 = 4;
    sub_4081A0((int)&v3, (int)&v16);
  }
  v17 = 0;
  v18 = 0;
  while ( v18 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v18) == 2 )
    {
      v17 = 1;
      break;
    }
    ++v18;
  }
  if ( v17 )
  {
    v19 = 0;
    sub_4081A0((int)&v3, (int)&v19);
    v20 = 2;
    sub_4081A0((int)&v3, (int)&v20);
    v21 = 0;
    sub_4081A0((int)&v3, (int)&v21);
    v22 = 1;
    sub_4081A0((int)&v3, (int)&v22);
  }
  v23 = 0;
  v24 = 0;
  while ( v24 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v24) == 3 )
    {
      v23 = 1;
      break;
    }
    ++v24;
  }
  if ( v23 )
  {
    v25 = 0;
    sub_4081A0((int)&v3, (int)&v25);
    v26 = 3;
    sub_4081A0((int)&v3, (int)&v26);
    v27 = 0;
    sub_4081A0((int)&v3, (int)&v27);
    v28 = 1;
    sub_4081A0((int)&v3, (int)&v28);
  }
  v29 = 0;
  v30 = 0;
  while ( v30 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v30) == 21 )
    {
      v29 = 1;
      break;
    }
    ++v30;
  }
  if ( v29 )
  {
    v31 = 0;
    sub_4081A0((int)&v3, (int)&v31);
    v32 = 21;
    sub_4081A0((int)&v3, (int)&v32);
    v33 = 0;
    sub_4081A0((int)&v3, (int)&v33);
    v34 = 1;
    sub_4081A0((int)&v3, (int)&v34);
  }
  v35 = 0;
  v36 = 0;
  while ( v36 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v36) == 4 )
    {
      v35 = 1;
      break;
    }
    ++v36;
  }
  if ( v35 )
  {
    v37 = 0;
    sub_4081A0((int)&v3, (int)&v37);
    v38 = 4;
    sub_4081A0((int)&v3, (int)&v38);
    v39 = 0;
    sub_4081A0((int)&v3, (int)&v39);
    v40 = 1;
    sub_4081A0((int)&v3, (int)&v40);
  }
  v41 = 0;
  v42 = 0;
  while ( v42 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v42) == 9 )
    {
      v41 = 1;
      break;
    }
    ++v42;
  }
  if ( v41 )
  {
    v43 = 0;
    sub_4081A0((int)&v3, (int)&v43);
    v44 = 9;
    sub_4081A0((int)&v3, (int)&v44);
    v45 = 0;
    sub_4081A0((int)&v3, (int)&v45);
    v46 = 1;
    sub_4081A0((int)&v3, (int)&v46);
  }
  v47 = 0;
  v48 = 0;
  while ( v48 < sub_408A60(v2 + 612) )
  {
    if ( *(_WORD *)sub_408A80(v2 + 612, v48) == 16 )
    {
      v47 = 1;
      break;
    }
    ++v48;
  }
  if ( v47 )
  {
    v49 = 0;
    sub_4081A0((int)&v3, (int)&v49);
    v50 = 16;
    sub_4081A0((int)&v3, (int)&v50);
    v51 = 0;
    sub_4081A0((int)&v3, (int)&v51);
    v52 = 1;
    sub_4081A0((int)&v3, (int)&v52);
  }
  v53 = sub_41E760(v2, 1, 23, 0, (int)&v3) == 1;
  v4 = -1;
  sub_4017F0((int)&v3);
  return v53;
}

//----- (00420110) --------------------------------------------------------
char __thiscall sub_420110(int this, int a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9, char a10, int a11, int a12, int a13, int a14, int a15, int a16)
{
  int v17; // [sp+4h] [bp-18h]@1
  char v18; // [sp+Bh] [bp-11h]@1

  v17 = this;
  *(_DWORD *)(this + 352) = a2;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v17 + 356);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v17 + 384);
  v18 = sub_41F630(v17);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a10);
  return v18;
}

//----- (004201B0) --------------------------------------------------------
int __thiscall sub_4201B0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, void *a9)
{
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST20_4_0; // ST20_4@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  unsigned int v15; // ST0C_4@1
  int v16; // ST1C_4@1
  int result; // eax@3
  void *v18; // ST04_4@4
  int v19; // eax@4
  char v20; // bl@4
  int v21; // eax@4
  int v22; // ST08_4@4
  int v23; // eax@4
  int v24; // eax@4
  int v25; // eax@4
  int v26; // ST08_4@4
  int v27; // eax@4
  int v28; // eax@4
  int v29; // eax@4
  int v30; // eax@4
  int v31; // eax@4
  int v32; // eax@4
  int v33; // ST10_4@4
  int v34; // ST1C_4@4
  int  s; // [sp+1DCh] [bp+0h]@1
  unsigned int v36; // [sp+1CCh] [bp-10h]@1
  signed int v37; // [sp+1D8h] [bp-4h]@1
  char v38; // [sp+30h] [bp-1ACh]@4
  unsigned int v39; // [sp+2Ch] [bp-1B0h]@4
  char v40; // [sp+148h] [bp-94h]@4
  char v41; // [sp+138h] [bp-A4h]@4
  char v42; // [sp+139h] [bp-A3h]@4
  char v43; // [sp+13Ah] [bp-A2h]@4
  char v44; // [sp+13Bh] [bp-A1h]@4
  char v45; // [sp+13Ch] [bp-A0h]@4
  char v46; // [sp+13Dh] [bp-9Fh]@4
  char v47; // [sp+13Eh] [bp-9Eh]@4
  char v48; // [sp+13Fh] [bp-9Dh]@4
  char v49; // [sp+140h] [bp-9Ch]@4
  char v50; // [sp+141h] [bp-9Bh]@4
  char v51; // [sp+142h] [bp-9Ah]@4
  char v52; // [sp+143h] [bp-99h]@4
  char v53; // [sp+144h] [bp-98h]@4
  char v54; // [sp+145h] [bp-97h]@4
  char v55; // [sp+146h] [bp-96h]@4
  char v56; // [sp+147h] [bp-95h]@4
  __int16 v57; // [sp+48h] [bp-194h]@4
  __int16 v58; // [sp+4Ah] [bp-192h]@4
  char v59; // [sp+4Ch] [bp-190h]@4
  char v60; // [sp+4Dh] [bp-18Fh]@4
  __int16 v61; // [sp+4Eh] [bp-18Eh]@4
  __int16 v62; // [sp+50h] [bp-18Ch]@4
  char v63; // [sp+54h] [bp-188h]@4
  char v64; // [sp+94h] [bp-148h]@4
  __int16 v65; // [sp+A4h] [bp-138h]@4
  char v66; // [sp+A8h] [bp-134h]@4
  char v67; // [sp+10h] [bp-1CCh]@4
  char v68; // [sp+C4h] [bp-118h]@4

  v36 = (unsigned int)& s ^ dword_43901C;
  v15 = (unsigned int)& s ^ dword_43901C;
  v16 = this;
  v37 = 0;
  if ( *(_DWORD *)(this + 352) && *(_DWORD *)(this + 352) <= 0x22u )
  {
    sub_401700((int)&v38);
    LOBYTE(v37) = 1;
    v39 = 0;
    sub_401990((int)&v38, 8u);
    v18 = a9;
    v19 = sub_4019D0((int)&v38, v39);
    memcpy((void *)v19, v18, 8u);
    v39 = 8;
    sub_401990((int)&v38, v39 + 3);
    *(_BYTE *)sub_4019D0((int)&v38, v39) = 0;
    *(_BYTE *)sub_4019D0((int)&v38, v39 + 1) = 2;
    v20 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
    *(_BYTE *)sub_4019D0((int)&v38, v39 + 2) = v20;
    v39 = 11;
    v21 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
    sub_401990((int)&v38, v39 + v21);
    std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
    v22 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(&a2);
    v23 = sub_4019D0((int)&v38, v39);
    memcpy((void *)v23, (const void *)v22, v15);
    v39 += std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
    sub_401990((int)&v38, v39 + 2);
    *(_BYTE *)sub_4019D0((int)&v38, v39) = 0;
    *(_BYTE *)sub_4019D0((int)&v38, v39 + 1) = 3;
    v39 += 2;
    std__basic_ostringstream_char_std__char_traits_char__std__allocator_char____basic_ostringstream_char_std__char_traits_char__std__allocator_char__(
      &v40,
      2,
      1);
    LOBYTE(v37) = 2;
    sub_4125B0(&v40, "<NR><RES>");
    sub_4125B0(&v40, "&lt;ret event='OnRemoteNotification'&gt;");
    sub_4125B0(&v40, "&lt;srv&gt;");
    sub_4125B0(&v40, "&lt;id&gt;&lt;/id&gt;");
    sub_4125B0(&v40, "&lt;val srv_id=''&gt;undefined&lt;/val&gt;");
    sub_4125B0(&v40, "&lt;/srv&gt;");
    sub_4125B0(&v40, "&lt;srv&gt;");
    sub_4125B0(&v40, "&lt;id&gt;cAwaySrv&lt;/id&gt;");
    sub_4125B0(&v40, "&lt;val srv_id='cAwaySrv'&gt;");
    sub_4125B0(&v40, "&lt;Root&gt;");
    sub_4125B0(&v40, "&lt;CASXtraSetAwayMessage&gt;&lt;/CASXtraSetAwayMessage&gt;");
    v24 = sub_4125B0(&v40, "&lt;uin&gt;");
    v25 = std__operator___char_std__char_traits_char__std__allocator_char__(v24, v16 + 416);
    sub_4125B0(v25, "&lt;/uin&gt;");
    v26 = *(_DWORD *)(v16 + 352);
    v27 = sub_4125B0(&v40, "&lt;index&gt;");
    v28 = std__basic_ostream_char_std__char_traits_char____operator__(v27, v26, "&lt;/index&gt;");
    sub_4125B0(v28, ST10_4_0);
    v29 = sub_4125B0(&v40, "&lt;title&gt;");
    v30 = std__operator___char_std__char_traits_char__std__allocator_char__(v29, v16 + 356);
    sub_4125B0(v30, "&lt;/title&gt;");
    v31 = sub_4125B0(&v40, "&lt;desc&gt;");
    v32 = std__operator___char_std__char_traits_char__std__allocator_char__(v31, v16 + 384);
    sub_4125B0(v32, "&lt;/desc&gt;");
    sub_4125B0(&v40, "&lt;/Root&gt;");
    sub_4125B0(&v40, "&lt;/val&gt;");
    sub_4125B0(&v40, "&lt;/srv&gt;");
    sub_4125B0(&v40, "&lt;srv&gt;");
    sub_4125B0(&v40, "&lt;id&gt;cRandomizerSrv&lt;/id&gt;");
    sub_4125B0(&v40, "&lt;val srv_id='cRandomizerSrv'&gt;undefined&lt;/val&gt;");
    sub_4125B0(&v40, "&lt;/srv&gt;");
    sub_4125B0(&v40, "&lt;/ret&gt;");
    sub_4125B0(&v40, "</RES></NR>\r\n");
    v41 = 59;
    v42 = 96;
    v43 = -77;
    v44 = -17;
    v45 = -40;
    v46 = 42;
    v47 = 108;
    v48 = 69;
    v49 = -92;
    v50 = -32;
    v51 = -100;
    v52 = 90;
    v53 = 94;
    v54 = 103;
    v55 = -24;
    v56 = 101;
    sub_42B020();
    LOBYTE(v37) = 3;
    v57 = 9;
    v58 = 0;
    v59 = 26;
    v60 = 0;
    v61 = 0;
    v62 = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v63, &unk_432A07);
    memcpy(&v64, &v41, 0x10u);
    v65 = 8;
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
      &v66,
      "Script Plug-in: Remote Notification Arrive");
    std__basic_ostringstream_char_std__char_traits_char__std__allocator_char____str(
      &v40,
      &v67,
      v33,
      ST14_4_0,
      ST18_4_0,
      v16,
      ST20_4_0,
      ST24_4_0,
      ST28_4_0);
    LOBYTE(v37) = 4;
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v68);
    LOBYTE(v37) = 3;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v67);
    sub_42C440(&v57, (int)&v38, v39);
    sub_41E760(v34, 4, 11, 0, (int)&v38);
    LOBYTE(v37) = 2;
    sub_42AF60((int)&v57);
    LOBYTE(v37) = 1;
    std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vbase_destructor(&v40);
    LOBYTE(v37) = 0;
    sub_4017F0((int)&v38);
    v37 = -1;
    result = std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  }
  else
  {
    result = std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  }
  return result;
}

//----- (00420800) --------------------------------------------------------
bool __fastcall sub_420800(int a1)
{
  return sub_41E760(a1, 19, 18, 0, 0) == 1;
}

//----- (00420830) --------------------------------------------------------
bool __fastcall sub_420830(int a1)
{
  return sub_41E760(a1, 19, 17, 0, 0) == 1;
}

//----- (00420860) --------------------------------------------------------
char __thiscall sub_420860(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int *a9)
{
  __int16 ST44_2_0; // ST44_2@0
  void *ST48_4_0; // ST48_4@0
  const void *ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  int v13; // ST0C_4@1
  int v15; // eax@1
  size_t v16; // ST50_4@4
  char v17; // ST4C_1@4
  __int16 v18; // ST48_2@4
  int v19; // ST4C_4@4
  int v20; // ST50_4@4
  char v21; // ST13_1@4
  int  s; // [sp+4Ch] [bp+0h]@1
  unsigned int v23; // [sp+3Ch] [bp-10h]@1
  signed int v24; // [sp+48h] [bp-4h]@1
  char v25; // [sp+8h] [bp-44h]@1
  char v26; // [sp+9h] [bp-43h]@1
  char v27; // [sp+Ah] [bp-42h]@1
  char v28; // [sp+Bh] [bp-41h]@1
  char v29; // [sp+Ch] [bp-40h]@1
  char v30; // [sp+Dh] [bp-3Fh]@1
  char v31; // [sp+Eh] [bp-3Eh]@1
  char v32; // [sp+Fh] [bp-3Dh]@1
  char v33; // [sp+10h] [bp-3Ch]@1
  char v34; // [sp+11h] [bp-3Bh]@1
  char v35; // [sp+12h] [bp-3Ah]@1
  char v36; // [sp+13h] [bp-39h]@1
  char v37; // [sp+14h] [bp-38h]@1
  char v38; // [sp+15h] [bp-37h]@1
  char v39; // [sp+16h] [bp-36h]@1
  char v40; // [sp+17h] [bp-35h]@1
  char v41; // [sp+18h] [bp-34h]@1
  char v42; // [sp+19h] [bp-33h]@1
  char v43; // [sp+1Ah] [bp-32h]@1
  char v44; // [sp+1Bh] [bp-31h]@1
  int v45; // [sp+34h] [bp-18h]@1
  int v46; // [sp+38h] [bp-14h]@4
  int *v47; // [sp+40h] [bp-Ch]@4
  char v48; // [sp+1Ch] [bp-30h]@4

  v23 = (unsigned int)& s ^ dword_43901C;
  v13 = this;
  v24 = 0;
  v25 = 0;
  v26 = 1;
  v27 = 0;
  v28 = 16;
  v29 = 14;
  v30 = 0;
  v31 = -1;
  v32 = -1;
  v33 = -1;
  v34 = -1;
  v35 = -48;
  v36 = 7;
  v37 = 1;
  v38 = 0;
  v39 = -1;
  v40 = -1;
  v41 = -1;
  v42 = -1;
  v43 = -1;
  v44 = -1;
  v15 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(this + 416);
  v45 = atoi((const char *)v15);
  memcpy(&v31, &v45, 4u);
  if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(&a2, v13 + 416) )
  {
    v39 = -78;
    v40 = 4;
  }
  else
  {
    v39 = -48;
    v40 = 4;
  }
  ST50_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&a2);
  v46 = atoi((const char *)ST50_4_0);
  ST50_4_0 = 4;
  v47 = &v46;
  v23 = (unsigned int)&v41;
  memcpy(ST48_4_0, ST4C_4_0, v16);
  ST50_4_0 = (int)&v48;
  v47 = (int *)&v25;
  sub_412520((int)&v48, v17, v16);
  LOBYTE(v24) = 1;
  ST50_4_0 = (int)&v48;
  v47 = a9;
  v23 = 2;
  v46 = 21;
  v21 = sub_41E760(v13, ST44_2_0, v18, v19, v20) == 1;
  LOBYTE(v24) = 0;
  sub_4017F0((int)&v48);
  v24 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return v21;
}

//----- (004209E0) --------------------------------------------------------
char __thiscall sub_4209E0(int this, char a2, int a3)
{
  int v4; // eax@1
  int v5; // eax@1
  int v6; // eax@1
  int  s; // [sp+5Ch] [bp+0h]@1
  unsigned int v8; // [sp+18h] [bp-44h]@1
  int v9; // [sp+0h] [bp-5Ch]@1
  char v10; // [sp+Ch] [bp-50h]@1
  char v11; // [sp+Dh] [bp-4Fh]@1
  char v12; // [sp+Eh] [bp-4Eh]@1
  char v13; // [sp+Fh] [bp-4Dh]@1
  char v14; // [sp+10h] [bp-4Ch]@1
  char v15; // [sp+11h] [bp-4Bh]@1
  char v16; // [sp+12h] [bp-4Ah]@1
  char v17; // [sp+13h] [bp-49h]@1
  char v18; // [sp+14h] [bp-48h]@1
  char v19; // [sp+15h] [bp-47h]@1
  char v20; // [sp+1Ch] [bp-40h]@1
  char v21; // [sp+16h] [bp-46h]@1
  signed int v22; // [sp+58h] [bp-4h]@1
  __int32 v23; // [sp+8h] [bp-54h]@1
  char v24; // [sp+34h] [bp-28h]@1
  char v25; // [sp+7h] [bp-55h]@1

  v8 = (unsigned int)& s ^ dword_43901C;
  v9 = this;
  v10 = 8;
  v11 = 0;
  v12 = -1;
  v13 = -1;
  v14 = -1;
  v15 = -1;
  v16 = -1;
  v17 = 0;
  v18 = -1;
  v19 = -1;
  sub_412520((int)&v20, (char)&v10, (char)&v21);
  v22 = 0;
  v4 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(v9 + 416);
  v23 = atol((const char *)v4);
  v5 = sub_4019D0((int)&v20, 2u);
  memcpy((void *)v5, &v23, 4u);
  v6 = sub_4019D0((int)&v20, 8u);
  memcpy((void *)v6, (const void *)(v9 + 604), 2u);
  *(_BYTE *)sub_4019D0((int)&v20, 6u) = a2;
  sub_4014E0((int)&v24, (int)&v20, 1);
  LOBYTE(v22) = 1;
  sub_401A00((int)&v20);
  sub_42CD30((u_short *)&v24, (int)&v20, 0);
  v25 = sub_41E760(v9, 21, 2, a3, (int)&v20) == 1;
  LOBYTE(v22) = 0;
  sub_42BCD0((int)&v24);
  v22 = -1;
  sub_4017F0((int)&v20);
  return v25;
}

//----- (00420B30) --------------------------------------------------------
char __thiscall sub_420B30(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, void *a9, char a10)
{
  unsigned int v11; // ST0C_4@1
  void *v12; // ST04_4@1
  int v13; // eax@1
  char v14; // bl@1
  int v15; // eax@1
  int v16; // ST08_4@1
  int v17; // eax@1
  int v18; // eax@1
  int  s; // [sp+130h] [bp+0h]@1
  unsigned int v20; // [sp+120h] [bp-10h]@1
  int v21; // [sp+8h] [bp-128h]@1
  signed int v22; // [sp+12Ch] [bp-4h]@1
  char v23; // [sp+14h] [bp-11Ch]@1
  unsigned int v24; // [sp+10h] [bp-120h]@1
  __int16 v25; // [sp+2Ch] [bp-104h]@1
  __int16 v26; // [sp+2Eh] [bp-102h]@1
  char v27; // [sp+30h] [bp-100h]@1
  __int16 v28; // [sp+32h] [bp-FEh]@1
  __int16 v29; // [sp+34h] [bp-FCh]@1
  int v30; // [sp+4h] [bp-12Ch]@1
  char v31; // [sp+31h] [bp-FFh]@3
  char v32; // [sp+38h] [bp-F8h]@3
  char v33; // [sp+Fh] [bp-121h]@9

  v20 = (unsigned int)& s ^ dword_43901C;
  v11 = (unsigned int)& s ^ dword_43901C;
  v21 = this;
  v22 = 0;
  sub_401700((int)&v23);
  LOBYTE(v22) = 1;
  v24 = 0;
  sub_401990((int)&v23, 8u);
  v12 = a9;
  v13 = sub_4019D0((int)&v23, v24);
  memcpy((void *)v13, v12, 8u);
  v24 = 8;
  sub_401990((int)&v23, v24 + 3);
  *(_BYTE *)sub_4019D0((int)&v23, v24) = 0;
  *(_BYTE *)sub_4019D0((int)&v23, v24 + 1) = 2;
  v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  *(_BYTE *)sub_4019D0((int)&v23, v24 + 2) = v14;
  v24 = 11;
  v15 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  sub_401990((int)&v23, v24 + v15);
  std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  v16 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(&a2);
  v17 = sub_4019D0((int)&v23, v24);
  memcpy((void *)v17, (const void *)v16, v11);
  v18 = v24 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  v24 = v18;
  sub_401990((int)&v23, v18 + 2);
  *(_BYTE *)sub_4019D0((int)&v23, v24) = 0;
  *(_BYTE *)sub_4019D0((int)&v23, v24 + 1) = 3;
  v24 += 2;
  sub_42B020();
  LOBYTE(v22) = 2;
  v25 = 9;
  v26 = 0;
  v27 = a10;
  v28 = 0;
  v29 = 0;
  v30 = (unsigned __int8)a10 - 1;
  if ( (unsigned int)(unsigned __int8)a10 - 1 <= 0xEB )
  {
    switch ( v30 )
    {
      case 0:
        v31 = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v32, &unk_4325D6);
        break;
      case 231:
        v31 = 3;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v32);
        break;
      case 232:
        v31 = 3;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v32);
        break;
      case 233:
        v31 = 3;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v32);
        break;
      case 234:
        v31 = 3;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v32);
        break;
      case 235:
        v31 = 3;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v32);
        break;
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 10:
      case 11:
      case 12:
      case 13:
      case 14:
      case 15:
      case 16:
      case 17:
      case 18:
      case 19:
      case 20:
      case 21:
      case 22:
      case 23:
      case 24:
      case 25:
      case 26:
      case 27:
      case 28:
      case 29:
      case 30:
      case 31:
      case 32:
      case 33:
      case 34:
      case 35:
      case 36:
      case 37:
      case 38:
      case 39:
      case 40:
      case 41:
      case 42:
      case 43:
      case 44:
      case 45:
      case 46:
      case 47:
      case 48:
      case 49:
      case 50:
      case 51:
      case 52:
      case 53:
      case 54:
      case 55:
      case 56:
      case 57:
      case 58:
      case 59:
      case 60:
      case 61:
      case 62:
      case 63:
      case 64:
      case 65:
      case 66:
      case 67:
      case 68:
      case 69:
      case 70:
      case 71:
      case 72:
      case 73:
      case 74:
      case 75:
      case 76:
      case 77:
      case 78:
      case 79:
      case 80:
      case 81:
      case 82:
      case 83:
      case 84:
      case 85:
      case 86:
      case 87:
      case 88:
      case 89:
      case 90:
      case 91:
      case 92:
      case 93:
      case 94:
      case 95:
      case 96:
      case 97:
      case 98:
      case 99:
      case 100:
      case 101:
      case 102:
      case 103:
      case 104:
      case 105:
      case 106:
      case 107:
      case 108:
      case 109:
      case 110:
      case 111:
      case 112:
      case 113:
      case 114:
      case 115:
      case 116:
      case 117:
      case 118:
      case 119:
      case 120:
      case 121:
      case 122:
      case 123:
      case 124:
      case 125:
      case 126:
      case 127:
      case 128:
      case 129:
      case 130:
      case 131:
      case 132:
      case 133:
      case 134:
      case 135:
      case 136:
      case 137:
      case 138:
      case 139:
      case 140:
      case 141:
      case 142:
      case 143:
      case 144:
      case 145:
      case 146:
      case 147:
      case 148:
      case 149:
      case 150:
      case 151:
      case 152:
      case 153:
      case 154:
      case 155:
      case 156:
      case 157:
      case 158:
      case 159:
      case 160:
      case 161:
      case 162:
      case 163:
      case 164:
      case 165:
      case 166:
      case 167:
      case 168:
      case 169:
      case 170:
      case 171:
      case 172:
      case 173:
      case 174:
      case 175:
      case 176:
      case 177:
      case 178:
      case 179:
      case 180:
      case 181:
      case 182:
      case 183:
      case 184:
      case 185:
      case 186:
      case 187:
      case 188:
      case 189:
      case 190:
      case 191:
      case 192:
      case 193:
      case 194:
      case 195:
      case 196:
      case 197:
      case 198:
      case 199:
      case 200:
      case 201:
      case 202:
      case 203:
      case 204:
      case 205:
      case 206:
      case 207:
      case 208:
      case 209:
      case 210:
      case 211:
      case 212:
      case 213:
      case 214:
      case 215:
      case 216:
      case 217:
      case 218:
      case 219:
      case 220:
      case 221:
      case 222:
      case 223:
      case 224:
      case 225:
      case 226:
      case 227:
      case 228:
      case 229:
      case 230:
        break;
    }
  }
  sub_42C440(&v25, (int)&v23, v24);
  v33 = sub_41E760(v21, 4, 11, 0, (int)&v23) == 1;
  LOBYTE(v22) = 1;
  sub_42AF60((int)&v25);
  LOBYTE(v22) = 0;
  sub_4017F0((int)&v23);
  v22 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return v33;
}

//----- (00420FD0) --------------------------------------------------------
char __thiscall sub_420FD0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15)
{
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  const void *ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  const void *ST2C_4_0; // ST2C_4@0
  size_t ST30_4_0; // ST30_4@0
  int v23; // ST0C_4@1
  int v24; // esi@1
  char v25; // bl@1
  const void *v26; // ST1C_4@1
  void *v27; // ST18_4@1
  u_short v28; // ST20_2@1
  unsigned int v29; // ST20_4@1
  void *v30; // ST20_4@1
  unsigned int v31; // ST28_4@1
  void *v32; // ST28_4@1
  int v33; // esi@1
  unsigned int v34; // ST28_4@1
  void *v35; // ST28_4@1
  int v36; // ST2C_4@1
  size_t v37; // ST30_4@1
  __int16 v38; // ST24_2@1
  __int16 v39; // ST28_2@1
  int v40; // ST2C_4@1
  int v41; // ST30_4@1
  char v42; // ST13_1@1
  signed int v43; // [sp+3Ch] [bp-4h]@1
  char v44; // [sp+14h] [bp-2Ch]@1
  u_short v45; // [sp+2Ch] [bp-14h]@1

  v23 = this;
  v43 = 1;
  v24 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST1C_4_0 = v24 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9) + 5;
  sub_401770((int)&v44, ST1C_4_0);
  LOBYTE(v43) = 2;
  v25 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST1C_4_0 = 0;
  *(_BYTE *)sub_4019D0((int)&v44, (unsigned int)v26) = v25;
  ST1C_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST1C_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(&a2);
  ST18_4_0 = 1;
  ST18_4_0 = sub_4019D0((int)&v44, ST18_4_0);
  memcpy(v27, v26, ST20_4_0);
  ST20_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9);
  v45 = htons(v28);
  ST20_4_0 = 2;
  ST1C_4_0 = (int)&v45;
  ST20_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2) + 1;
  ST20_4_0 = sub_4019D0((int)&v44, v29);
  memcpy(v30, ST24_4_0, ST28_4_0);
  ST28_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9);
  ST28_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(&a9);
  ST28_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2) + 3;
  ST28_4_0 = sub_4019D0((int)&v44, v31);
  memcpy(v32, ST2C_4_0, ST30_4_0);
  ST30_4_0 = 2;
  *(_DWORD *)&v45 = 0;
  v33 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST28_4_0 = v33 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9) + 3;
  ST28_4_0 = sub_4019D0((int)&v44, v34);
  memset(v35, v36, v37);
  ST30_4_0 = (size_t)&v44;
  *(_DWORD *)&v45 = 0;
  ST28_4_0 = 24;
  ST24_4_0 = (const void *)19;
  v42 = sub_41E760(v23, v38, v39, v40, v41) == 1;
  LOBYTE(v43) = 1;
  sub_4017F0((int)&v44);
  LOBYTE(v43) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v43 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  return v42;
}

//----- (00421160) --------------------------------------------------------
char __thiscall sub_421160(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16)
{
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  const void *ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  const void *ST2C_4_0; // ST2C_4@0
  size_t ST30_4_0; // ST30_4@0
  int v24; // ST0C_4@1
  int v25; // esi@1
  char v26; // bl@1
  const void *v27; // ST1C_4@1
  void *v28; // ST18_4@1
  unsigned int v29; // ST20_4@1
  unsigned int v30; // ST20_4@1
  void *v31; // ST20_4@1
  unsigned int v32; // ST28_4@1
  void *v33; // ST28_4@1
  int v34; // esi@1
  unsigned int v35; // ST28_4@1
  void *v36; // ST28_4@1
  int v37; // ST2C_4@1
  size_t v38; // ST30_4@1
  __int16 v39; // ST24_2@1
  __int16 v40; // ST28_2@1
  int v41; // ST2C_4@1
  int v42; // ST30_4@1
  char v43; // ST13_1@1
  signed int v44; // [sp+3Ch] [bp-4h]@1
  char v45; // [sp+14h] [bp-2Ch]@1
  u_short v46; // [sp+2Ch] [bp-14h]@1

  v24 = this;
  v44 = 1;
  v25 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST1C_4_0 = v25 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9) + 6;
  sub_401770((int)&v45, ST1C_4_0);
  LOBYTE(v44) = 2;
  v26 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST1C_4_0 = 0;
  *(_BYTE *)sub_4019D0((int)&v45, (unsigned int)v27) = v26;
  ST1C_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST1C_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(&a2);
  ST18_4_0 = 1;
  ST18_4_0 = sub_4019D0((int)&v45, ST18_4_0);
  memcpy(v28, v27, ST20_4_0);
  ST20_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2) + 1;
  *(_BYTE *)sub_4019D0((int)&v45, v29) = a16;
  ST20_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9);
  v46 = htons(v29);
  ST20_4_0 = 2;
  ST1C_4_0 = (int)&v46;
  ST20_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2) + 2;
  ST20_4_0 = sub_4019D0((int)&v45, v30);
  memcpy(v31, ST24_4_0, ST28_4_0);
  ST28_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9);
  ST28_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(&a9);
  ST28_4_0 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2) + 4;
  ST28_4_0 = sub_4019D0((int)&v45, v32);
  memcpy(v33, ST2C_4_0, ST30_4_0);
  ST30_4_0 = 2;
  *(_DWORD *)&v46 = 0;
  v34 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a2);
  ST28_4_0 = v34 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(&a9) + 4;
  ST28_4_0 = sub_4019D0((int)&v45, v35);
  memset(v36, v37, v38);
  ST30_4_0 = (size_t)&v45;
  *(_DWORD *)&v46 = 0;
  ST28_4_0 = 26;
  ST24_4_0 = (const void *)19;
  v43 = sub_41E760(v24, v39, v40, v41, v42) == 1;
  LOBYTE(v44) = 1;
  sub_4017F0((int)&v45);
  LOBYTE(v44) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v44 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  return v43;
}

//----- (00421310) --------------------------------------------------------
char __thiscall sub_421310(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST20_4_0; // ST20_4@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  char ST38_1_0; // ST38_1@0
  int v30; // eax@1
  char v31; // ST00_1@1
  char v32; // ST1C_1@1
  char v33; // al@1
  int v34; // [sp+14h] [bp-20h]@1
  signed int v35; // [sp+30h] [bp-4h]@1
  int *v36; // [sp+1Ch] [bp-18h]@1
  int v37; // [sp+10h] [bp-24h]@1
  int v38; // [sp+Ch] [bp-28h]@1
  int *v39; // [sp+18h] [bp-1Ch]@1
  int v40; // [sp+8h] [bp-2Ch]@1
  char v41; // [sp+7h] [bp-2Dh]@1
  char v42; // [sp+23h] [bp-11h]@1

  v34 = this;
  v35 = 1;
  v36 = &ST20_4_0;
  v30 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  v37 = v30;
  v38 = v30;
  LOBYTE(v35) = 2;
  v39 = &ST04_4_0;
  v40 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  LOBYTE(v35) = 1;
  v33 = sub_421160(
          v34,
          v31,
          ST04_4_0,
          ST08_4_0,
          ST0C_4_0,
          ST10_4_0,
          ST14_4_0,
          ST18_4_0,
          v32,
          ST20_4_0,
          ST24_4_0,
          ST28_4_0,
          ST2C_4_0,
          ST30_4_0,
          ST34_4_0,
          ST38_1_0);
  v41 = v33;
  v42 = v33;
  LOBYTE(v35) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v35 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  return v42;
}

//----- (004213C0) --------------------------------------------------------
char __thiscall sub_4213C0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15)
{
  char ST20_1_0; // ST20_1@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  char ST3C_1_0; // ST3C_1@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  int ST54_4_0; // ST54_4@0
  int v30; // eax@1
  char v31; // al@1
  int v32; // [sp+30h] [bp-20h]@1
  signed int v33; // [sp+4Ch] [bp-4h]@1
  int v34; // [sp+0h] [bp-50h]@1
  int *v35; // [sp+38h] [bp-18h]@1
  int v36; // [sp+2Ch] [bp-24h]@1
  int v37; // [sp+28h] [bp-28h]@1
  int v38; // [sp-8h] [bp-58h]@1
  int *v39; // [sp+34h] [bp-1Ch]@1
  int v40; // [sp+24h] [bp-2Ch]@1
  char v41; // [sp+23h] [bp-2Dh]@1
  char v42; // [sp+3Fh] [bp-11h]@1

  v32 = this;
  v33 = 1;
  v35 = &v34;
  v30 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  v36 = v30;
  v37 = v30;
  LOBYTE(v33) = 2;
  v39 = &v38;
  v40 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  LOBYTE(v33) = 1;
  v31 = sub_420FD0(
          v32,
          ST20_1_0,
          ST24_4_0,
          ST28_4_0,
          ST2C_4_0,
          ST30_4_0,
          ST34_4_0,
          ST38_4_0,
          ST3C_1_0,
          ST40_4_0,
          ST44_4_0,
          ST48_4_0,
          ST4C_4_0,
          ST50_4_0,
          ST54_4_0);
  v41 = v31;
  v42 = v31;
  LOBYTE(v33) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v33 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  return v42;
}

//----- (00421470) --------------------------------------------------------
int __fastcall sub_421470(int a1)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  char ST3C_1_0; // ST3C_1@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  int ST54_4_0; // ST54_4@0
  int ST5C_4_0; // ST5C_4@0
  int ST60_4_0; // ST60_4@0
  int ST64_4_0; // ST64_4@0
  int ST68_4_0; // ST68_4@0
  int v24; // ST5C_4@1
  int v25; // ST60_4@1
  int v26; // ST64_4@1
  int v27; // ST68_4@1
  int v28; // ST5C_4@1
  int v29; // ST60_4@1
  int v30; // ST64_4@1
  int v31; // ST68_4@1
  int v32; // ST5C_4@1
  int v33; // ST60_4@1
  int v34; // ST64_4@1
  int v35; // ST68_4@1
  int v36; // ST5C_4@1
  int v37; // ST60_4@1
  int v38; // ST64_4@1
  int v39; // ST68_4@1
  int v40; // ST5C_4@1
  int v41; // ST60_4@1
  int v42; // ST64_4@1
  int v43; // ST68_4@1
  int v44; // ST5C_4@1
  int v45; // ST60_4@1
  int v46; // ST64_4@1
  int v47; // ST68_4@1
  int v48; // ST5C_4@1
  int v49; // ST60_4@1
  int v50; // ST64_4@1
  int v51; // ST68_4@1
  int v52; // ST5C_4@1
  int v53; // ST60_4@1
  int v54; // ST64_4@1
  int v55; // ST68_4@1
  int v56; // ST5C_4@1
  int v57; // ST60_4@1
  int v58; // ST64_4@1
  int v59; // ST68_4@1
  int v60; // ST5C_4@1
  int v61; // ST60_4@1
  int v62; // ST64_4@1
  int v63; // ST68_4@1
  int v64; // ST5C_4@1
  int v65; // ST60_4@1
  int v66; // ST64_4@1
  int v67; // ST68_4@1
  int v68; // ST5C_4@1
  int v69; // ST60_4@1
  int v70; // ST64_4@1
  int v71; // ST68_4@1
  int v72; // ST5C_4@1
  int v73; // ST60_4@1
  int v74; // ST64_4@1
  int v75; // ST68_4@1
  void *v76; // eax@1
  int v77; // eax@4
  int v78; // eax@4
  int v79; // ST3C_4@4
  int v80; // ST40_4@4
  int v81; // ST44_4@4
  int v82; // ST48_4@4
  int v83; // ST4C_4@4
  int v84; // ST50_4@4
  int v85; // ST54_4@4
  __time64_t v86; // qax@4
  int v87; // [sp+20h] [bp-28h]@1
  int v88; // [sp+44h] [bp-4h]@1
  int v89; // [sp+34h] [bp-14h]@1
  int v90; // [sp+1Ch] [bp-2Ch]@2
  int v91; // [sp+38h] [bp-10h]@4
  char *v92; // [sp+30h] [bp-18h]@4
  int v93; // [sp+18h] [bp-30h]@4
  int v94; // [sp+14h] [bp-34h]@4
  int *v95; // [sp+2Ch] [bp-1Ch]@4
  int v96; // [sp+10h] [bp-38h]@4
  int v97; // [sp+Ch] [bp-3Ch]@4
  int *v98; // [sp+28h] [bp-20h]@4
  int v99; // [sp+8h] [bp-40h]@4
  char *v100; // [sp+24h] [bp-24h]@4
  int v101; // [sp+4h] [bp-44h]@4

  v87 = a1;
  *(_DWORD *)a1 = &off_433214;
  sub_4084E0(v87 + 8);
  v88 = 0;
  sub_408760(v87 + 32);
  sub_4084E0(v87 + 56);
  sub_4084E0(v87 + 80);
  sub_4084E0(v87 + 104);
  sub_4084E0(v87 + 128);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 152,
    ST5C_4_0,
    ST60_4_0,
    ST64_4_0,
    ST68_4_0);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 180,
    v24,
    v25,
    v26,
    v27);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 208,
    v24,
    v25,
    v26,
    v27);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 236,
    v28,
    v29,
    v30,
    v31);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 264,
    v32,
    v33,
    v34,
    v35);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 292,
    v36,
    v37,
    v38,
    v39);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 324,
    v40,
    v41,
    v42,
    v43);
  *(_DWORD *)(v87 + 352) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 356,
    v44,
    v45,
    v46,
    v47);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 384,
    v48,
    v49,
    v50,
    v51);
  *(_DWORD *)(v87 + 412) = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 416,
    v52,
    v53,
    v54,
    v55);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 444,
    v56,
    v57,
    v58,
    v59);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 476,
    v60,
    v61,
    v62,
    v63);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 504,
    v64,
    v65,
    v66,
    v67);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 536,
    v68,
    v69,
    v70,
    v71);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    v87 + 564,
    v72,
    v73,
    v74,
    v75);
  *(_DWORD *)(v87 + 600) = -1;
  *(_WORD *)(v87 + 604) = 1;
  *(_DWORD *)(v87 + 608) = 1;
  sub_4089D0(v87 + 612);
  sub_408B90(v87 + 636);
  sub_408D50(v87 + 660);
  sub_408E10(v87 + 692);
  *(_DWORD *)(v87 + 724) = 0;
  sub_4090A0(v87 + 732);
  *(_DWORD *)(v87 + 764) = -1;
  *(_BYTE *)(v87 + 768) = 0;
  *(_DWORD *)(v87 + 784) = -1;
  *(_BYTE *)(v87 + 788) = 1;
  *(_WORD *)(v87 + 790) = 0;
  v76 = operator new(0x18u);
  v89 = (int)v76;
  LOBYTE(v88) = 26;
  if ( v76 )
    v90 = sub_407220(v89);
  else
    v90 = 0;
  v91 = v90;
  LOBYTE(v88) = 25;
  *(_DWORD *)(v87 + 728) = v90;
  v92 = &ST3C_1_0;
  v77 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST3C_1_0);
  v93 = v77;
  v94 = v77;
  LOBYTE(v88) = 27;
  v95 = &ST28_4_0;
  v78 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST28_4_0);
  v96 = v78;
  v97 = v78;
  LOBYTE(v88) = 28;
  v98 = &ST04_4_0;
  v99 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST04_4_0);
  LOBYTE(v88) = 25;
  sub_406BC0(
    v87,
    63,
    ST04_4_0,
    ST08_4_0,
    ST0C_4_0,
    ST10_4_0,
    ST14_4_0,
    ST18_4_0,
    ST1C_4_0,
    0,
    4399934,
    ST28_4_0,
    ST2C_4_0,
    ST30_4_0,
    ST34_4_0,
    (int)&unk_43233B,
    ST3C_1_0,
    ST40_4_0,
    ST44_4_0,
    ST48_4_0,
    ST4C_4_0,
    ST50_4_0,
    ST54_4_0,
    0);
  v100 = &ST3C_1_0;
  v101 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST3C_1_0);
  sub_406B50(v87, (char)"login.oscar.aol.com", v79, v80, v81, v82, v83, v84, v85);
  v86 = sub_41AB10(0);
  *(_DWORD *)(v87 + 776) = v86;
  *(_DWORD *)(v87 + 780) = *((_DWORD *)&v86 + 1);
  tzset();
  return v87;
}

//----- (00421810) --------------------------------------------------------
char __fastcall sub_421810(int a1)
{
  char result; // al@2

  if ( sub_4209E0(a1, 60, a1 + 596) )
    result = 1;
  else
    result = 0;
  return result;
}

//----- (00421840) --------------------------------------------------------
char __thiscall sub_421840(int this, int a2)
{
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST38_4_0; // ST38_4@0
  int ST3C_4_0; // ST3C_4@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  char ST50_1_0; // ST50_1@0
  int ST54_4_0; // ST54_4@0
  int ST58_4_0; // ST58_4@0
  int ST5C_4_0; // ST5C_4@0
  int ST60_4_0; // ST60_4@0
  int ST64_4_0; // ST64_4@0
  int ST68_4_0; // ST68_4@0
  int ST6C_4_0; // ST6C_4@0
  __int16 ST70_2_0; // ST70_2@0
  char ST74_1_0; // ST74_1@0
  void *ST78_4_0; // ST78_4@0
  void *ST7C_4_0; // ST7C_4@0
  unsigned int v22; // ST34_4@1
  char result; // al@2
  int v24; // eax@9
  int v25; // eax@17
  int v26; // eax@17
  int v27; // eax@17
  int v28; // ST30_4@20
  int v29; // eax@20
  int v30; // eax@20
  struct tm *v31; // ST7C_4@20
  int v32; // ST20_4@20
  int v33; // ST24_4@20
  int v34; // ST28_4@20
  int v35; // ST2C_4@20
  int v36; // ST30_4@20
  int  s; // [sp+190h] [bp+0h]@1
  unsigned int v38; // [sp+164h] [bp-2Ch]@1
  int v39; // [sp+14h] [bp-17Ch]@1
  unsigned __int16 v40; // [sp+168h] [bp-28h]@3
  signed int v41; // [sp+18Ch] [bp-4h]@3
  char v42; // [sp+16Ch] [bp-24h]@7
  unsigned __int16 v43; // [sp+120h] [bp-70h]@9
  int v44; // [sp+118h] [bp-78h]@17
  unsigned __int16 v45; // [sp+90h] [bp-100h]@17
  struct tm Tm; // [sp+124h] [bp-6Ch]@17
  unsigned __int16 v47; // [sp+11Ch] [bp-74h]@17
  char v48; // [sp+148h] [bp-48h]@20
  char v49; // [sp+94h] [bp-FCh]@20
  int v50; // [sp-34h] [bp-1C4h]@20
  int *v51; // [sp+20h] [bp-170h]@20
  int v52; // [sp+10h] [bp-180h]@20
  int v53; // [sp+Ch] [bp-184h]@20
  int *v54; // [sp+1Ch] [bp-174h]@20
  int v55; // [sp+8h] [bp-188h]@20
  char v56; // [sp+2Ch] [bp-164h]@20
  int v57; // [sp+4h] [bp-18Ch]@20
  __time64_t v58; // [sp+84h] [bp-10Ch]@20
  int *v59; // [sp+18h] [bp-178h]@20
  int v60; // [sp+0h] [bp-190h]@20

  v38 = (unsigned int)& s ^ dword_43901C;
  v22 = (unsigned int)& s ^ dword_43901C;
  v39 = this;
  if ( *(_DWORD *)(a2 + 8) == *(_DWORD *)(this + 596) )
  {
    sub_42C060((int)&v40);
    v41 = 0;
    if ( sub_42CE20((int)&v40, a2 + 12, 0) )
    {
      if ( v40 == 1 )
      {
        if ( (unsigned int)sub_4019B0((int)&v42) >= 0xA )
        {
          v24 = sub_4019D0((int)&v42, 6u);
          memcpy(&v43, (const void *)v24, 2u);
          if ( v43 == 66 )
          {
            if ( sub_4209E0(v39, 62, v39 + 596) )
            {
              v41 = -1;
              sub_42BCD0((int)&v40);
              result = 1;
            }
            else
            {
              v41 = -1;
              sub_42BCD0((int)&v40);
              result = 0;
            }
          }
          else
          {
            if ( v43 == 65 )
            {
              if ( (unsigned int)sub_4019B0((int)&v42) >= 0x19 )
              {
                v25 = sub_4019D0((int)&v42, 0xAu);
                memcpy(&v44, (const void *)v25, 4u);
                v26 = sub_4019D0((int)&v42, 0xEu);
                memcpy(&v45, (const void *)v26, 2u);
                Tm.tm_isdst = 0;
                Tm.tm_year = v45 - 1900;
                Tm.tm_mon = *(_BYTE *)sub_4019D0((int)&v42, 0x10u) - 1;
                Tm.tm_mday = *(_BYTE *)sub_4019D0((int)&v42, 0x11u);
                Tm.tm_hour = *(_BYTE *)sub_4019D0((int)&v42, 0x12u);
                Tm.tm_min = *(_BYTE *)sub_4019D0((int)&v42, 0x13u);
                Tm.tm_sec = 0;
                v27 = sub_4019D0((int)&v42, 0x16u);
                memcpy(&v47, (const void *)v27, 2u);
                if ( sub_4019B0((int)&v42) >= (unsigned int)v47 + 24 && (signed int)v47 >= 1 )
                {
                  v28 = v47 - 1;
                  v29 = sub_4019D0((int)&v42, 0x18u);
                  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                    &v48,
                    v29,
                    v28);
                  LOBYTE(v41) = 1;
                  std__basic_ostringstream_char_std__char_traits_char__std__allocator_char____basic_ostringstream_char_std__char_traits_char__std__allocator_char__(
                    &v49,
                    2,
                    1);
                  LOBYTE(v41) = 2;
                  std__basic_ostream_char_std__char_traits_char____operator__(&v49, v44);
                  v51 = &v50;
                  v30 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v48);
                  v52 = v30;
                  v53 = v30;
                  LOBYTE(v41) = 3;
                  v54 = &ST18_4_0;
                  v55 = std__basic_ostringstream_char_std__char_traits_char__std__allocator_char____str(
                          &v49,
                          &ST18_4_0,
                          ST18_4_0,
                          ST1C_4_0,
                          1,
                          0,
                          1,
                          0,
                          0);
                  LOBYTE(v41) = 2;
                  v57 = sub_406D30(
                          (int)&v56,
                          v22,
                          ST38_4_0,
                          ST3C_4_0,
                          ST40_4_0,
                          ST44_4_0,
                          ST48_4_0,
                          ST4C_4_0,
                          ST50_1_0,
                          ST54_4_0,
                          ST58_4_0,
                          ST5C_4_0,
                          ST60_4_0,
                          ST64_4_0,
                          ST68_4_0,
                          ST6C_4_0,
                          ST70_2_0,
                          ST74_1_0,
                          ST78_4_0,
                          ST7C_4_0);
                  LOBYTE(v41) = 4;
                  ST7C_4_0 = &Tm;
                  v58 = sub_41AB30(v31);
                  v59 = &v32;
                  v60 = sub_407FF0((int)&v32, (int)&v56);
                  (*(int (__thiscall **)(int, int, int, int, int, int))(*(_DWORD *)v39 + 12))(
                    v39,
                    v32,
                    v33,
                    v34,
                    v35,
                    v36);
                  LOBYTE(v41) = 2;
                  sub_4070B0((int)&v56);
                  LOBYTE(v41) = 1;
                  std__basic_ostringstream_char_std__char_traits_char__std__allocator_char_____vbase_destructor(&v49);
                  LOBYTE(v41) = 0;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v48);
                  v41 = -1;
                  sub_42BCD0((int)&v40);
                  result = 1;
                }
                else
                {
                  v41 = -1;
                  sub_42BCD0((int)&v40);
                  result = 0;
                }
              }
              else
              {
                v41 = -1;
                sub_42BCD0((int)&v40);
                result = 0;
              }
            }
            else
            {
              v41 = -1;
              sub_42BCD0((int)&v40);
              result = 0;
            }
          }
        }
        else
        {
          v41 = -1;
          sub_42BCD0((int)&v40);
          result = 0;
        }
      }
      else
      {
        v41 = -1;
        sub_42BCD0((int)&v40);
        result = 0;
      }
    }
    else
    {
      v41 = -1;
      sub_42BCD0((int)&v40);
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00421C50) --------------------------------------------------------
char __thiscall sub_421C50(int this, int a2)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int v5; // ST10_4@4
  int v6; // ST14_4@4
  int v7; // ST18_4@4
  char result; // al@5
  int v9; // eax@3
  int v10; // eax@3
  int v11; // eax@3
  char v12; // bl@3
  int v13; // eax@3
  int v14; // ST1C_4@3
  int v15; // eax@3
  int v16; // ST18_4@3
  int v17; // eax@3
  int v18; // eax@3
  int v19; // eax@9
  int v20; // ST1C_4@9
  signed int v21; // eax@9
  int  s; // [sp+1D4h] [bp+0h]@1
  unsigned int v23; // [sp+1A0h] [bp-34h]@1
  int v24; // [sp+Ch] [bp-1C8h]@1
  char v25; // [sp+1ACh] [bp-28h]@1
  signed int v26; // [sp+1D0h] [bp-4h]@1
  unsigned int v27; // [sp+1C4h] [bp-10h]@1
  unsigned int v28; // [sp+1A8h] [bp-2Ch]@1
  unsigned int v29; // [sp+1A4h] [bp-30h]@6
  char *v30; // [sp+14h] [bp-1C0h]@9
  int v31; // [sp+8h] [bp-1CCh]@9
  signed int v32; // [sp+4h] [bp-1D0h]@9
  signed int v33; // [sp+1Ch] [bp-1B8h]@9
  char v34; // [sp+20h] [bp-1B4h]@11
  char v35; // [sp+100h] [bp-D4h]@11
  char v36; // [sp+13h] [bp-1C1h]@12

  v23 = (unsigned int)& s ^ dword_43901C;
  v24 = this;
  sub_401700((int)&v25);
  v26 = 0;
  v27 = 0;
  v28 = 0;
  while ( v28 < sub_4095F0(a2) )
  {
    v9 = sub_401C80(a2, v28);
    v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v9);
    sub_401990((int)&v25, v27 + v10 + 1);
    v11 = sub_401C80(a2, v28);
    v12 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v11);
    *(_BYTE *)sub_4019D0((int)&v25, v27) = v12;
    v13 = sub_401C80(a2, v28);
    v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v13);
    v15 = sub_401C80(a2, v28);
    v16 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(v15);
    v17 = sub_4019D0((int)&v25, v27 + 1);
    memcpy((void *)v17, (const void *)v16, v14);
    v18 = sub_401C80(a2, v28);
    v27 += std__basic_string_char_std__char_traits_char__std__allocator_char____length(v18) + 1;
    ++v28;
  }
  if ( sub_41E760(v24, 3, 15, 0, (int)&v25) == 1 )
  {
    v29 = 0;
    while ( v29 < sub_4095F0(a2) )
    {
      v19 = sub_401C80(a2, v29);
      v30 = &ST04_1_0;
      v31 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(v19);
      v21 = sub_41ACD0(v24, ST04_1_0, ST08_4_0, ST0C_4_0, v5, v6, v7, v20);
      v32 = v21;
      v33 = v21;
      if ( v21 < 0 )
      {
        sub_406400();
        LOBYTE(v26) = 1;
        sub_401C80(a2, v29);
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v34);
        v35 = 1;
        sub_408610(v24 + 8, (int)&v34);
        LOBYTE(v26) = 0;
        sub_4078E0((int)&v34);
      }
      ++v29;
    }
    v36 = 1;
    v26 = -1;
    sub_4017F0((int)&v25);
    result = v36;
  }
  else
  {
    v26 = -1;
    sub_4017F0((int)&v25);
    result = 0;
  }
  return result;
}

//----- (00421EB0) --------------------------------------------------------
char __thiscall sub_421EB0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  int v9; // [sp+4h] [bp-30h]@1
  signed int v10; // [sp+30h] [bp-4h]@1
  char v11; // [sp+Ch] [bp-28h]@1
  char v12; // [sp+Bh] [bp-29h]@1

  v9 = this;
  v10 = 0;
  sub_4094F0((int)&v11, 1u, (int)&a2);
  LOBYTE(v10) = 1;
  v12 = sub_421C50(v9, (int)&v11);
  LOBYTE(v10) = 0;
  sub_409560((int)&v11);
  v10 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  return v12;
}

//----- (00421F30) --------------------------------------------------------
int __fastcall sub_421F30(int a1)
{
  int v2; // [sp+8h] [bp-18h]@1
  signed int v3; // [sp+1Ch] [bp-4h]@1
  int v4; // [sp+Ch] [bp-14h]@1
  int v5; // [sp+10h] [bp-10h]@1
  void *v6; // [sp+4h] [bp-1Ch]@2

  v2 = a1;
  *(_DWORD *)a1 = &off_433214;
  v3 = 25;
  doDisconnect(v2);
  v4 = *(_DWORD *)(v2 + 728);
  v5 = v4;
  if ( v4 )
    v6 = sub_407240(v5, 1);
  else
    v6 = 0;
  sub_407200(v2 + 732);
  sub_4071E0(v2 + 692);
  sub_4071C0(v2 + 660);
  sub_408C00(v2 + 636);
  sub_408A40(v2 + 612);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 564);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 536);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 504);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 476);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 444);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 416);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 384);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 356);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 324);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 292);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 264);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 236);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 208);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 180);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 152);
  sub_408550(v2 + 128);
  sub_408550(v2 + 104);
  sub_408550(v2 + 80);
  sub_408550(v2 + 56);
  sub_4087D0(v2 + 32);
  return sub_408550(v2 + 8);
}

//----- (00422190) --------------------------------------------------------
char __thiscall sub_422190(int this, unsigned __int16 a2, int a3)
{
  signed int v4; // eax@2
  int v5; // ST0C_4@4
  int v6; // eax@9
  int v7; // eax@9
  int v8; // edx@9
  int v9; // eax@9
  int v10; // eax@14
  int v11; // eax@14
  int v12; // edx@14
  int  s; // [sp+C4h] [bp+0h]@1
  unsigned int v14; // [sp+80h] [bp-44h]@1
  int v15; // [sp+0h] [bp-C4h]@1
  char v16; // [sp+40h] [bp-84h]@1
  signed int v17; // [sp+C0h] [bp-4h]@1
  __int16 v18; // [sp+60h] [bp-64h]@1
  __int16 v19; // [sp+62h] [bp-62h]@1
  __int16 v20; // [sp+64h] [bp-60h]@1
  unsigned int v21; // [sp+3Ch] [bp-88h]@2
  char v22; // [sp+44h] [bp-80h]@4
  char v23; // [sp+9Ch] [bp-28h]@5
  unsigned int v24; // [sp+38h] [bp-8Ch]@6
  u_short v25; // [sp+34h] [bp-90h]@9
  char v26; // [sp+A0h] [bp-24h]@9
  char v27; // [sp+18h] [bp-ACh]@9
  int v28; // [sp+20h] [bp-A4h]@9
  int v29; // [sp+24h] [bp-A0h]@9
  char v30; // [sp+36h] [bp-8Eh]@9
  unsigned int v31; // [sp+30h] [bp-94h]@12
  u_short v32; // [sp+2Ch] [bp-98h]@14
  char v33; // [sp+8h] [bp-BCh]@14
  int v34; // [sp+10h] [bp-B4h]@14
  int v35; // [sp+14h] [bp-B0h]@14
  char v36; // [sp+2Eh] [bp-96h]@14
  char v37; // [sp+68h] [bp-5Ch]@16
  char v38; // [sp+84h] [bp-40h]@17
  char v39; // [sp+7h] [bp-BDh]@17

  v14 = (unsigned int)& s ^ dword_43901C;
  v15 = this;
  sub_42C3E0((int)&v16);
  v17 = 0;
  v18 = a2;
  v19 = 0;
  v20 = 1;
  if ( a2 )
  {
    v4 = sub_41AB50(v15, a2);
    v21 = v4;
    if ( v4 < 0 )
    {
      v17 = -1;
      sub_42C3B0((int)&v16);
      return 0;
    }
    v5 = sub_408850(v15 + 32, v21) + 4;
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v22);
  }
  sub_401550((int)&v23, 0, 0, 200);
  LOBYTE(v17) = 1;
  if ( a2 )
  {
    v24 = 0;
    while ( v24 < sub_4085B0(v15 + 8) )
    {
      if ( *(_WORD *)(sub_4085D0(v15 + 8, v24) + 56) == a2 )
      {
        v6 = sub_4085D0(v15 + 8, v24);
        v25 = htons(*(_WORD *)(v6 + 88));
        v7 = sub_40EB60((int)&v26, (int)&v27);
        v8 = *(_DWORD *)v7;
        v9 = *(_DWORD *)(v7 + 4);
        v28 = v8;
        v29 = v9;
        sub_404CB0((int)&v26, v8, v9, (char)&v25, (char)&v30);
      }
      ++v24;
    }
  }
  else
  {
    v31 = 0;
    while ( v31 < sub_408830(v15 + 32) )
    {
      v10 = sub_408850(v15 + 32, v31);
      v32 = htons(*(_WORD *)v10);
      v11 = sub_40EB60((int)&v26, (int)&v33);
      v12 = *(_DWORD *)(v11 + 4);
      v34 = *(_DWORD *)v11;
      v35 = v12;
      sub_404CB0((int)&v26, v34, v12, (char)&v32, (char)&v36);
      ++v31;
    }
  }
  if ( !sub_408180((int)&v26) )
    sub_401CB0((int)&v37, (int)&v23);
  sub_401700((int)&v38);
  LOBYTE(v17) = 2;
  sub_42D990((int)&v16, (int)&v38, 0);
  v39 = sub_41E760(v15, 19, 9, a3, (int)&v38) == 1;
  LOBYTE(v17) = 1;
  sub_4017F0((int)&v38);
  LOBYTE(v17) = 0;
  sub_42BCD0((int)&v23);
  v17 = -1;
  sub_42C3B0((int)&v16);
  return v39;
}

//----- (00422490) --------------------------------------------------------
char __thiscall sub_422490(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, __int16 a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23, int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31, int a32, int a33, int a34, int a35, int a36, int a37, int a38, int a39, int a40, int a41, int a42, int a43, int a44, int a45, int a46, int a47, int a48, int a49, int a50, int a51, int a52, int a53, int a54, int a55, int a56, int a57, int a58, int a59, int a60, int a61, int a62, int a63)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int v104; // ST1C_4@1
  int  s; // [sp+C4h] [bp+0h]@1
  unsigned int v107; // [sp+B4h] [bp-10h]@1
  int v108; // [sp+10h] [bp-B4h]@1
  signed int v109; // [sp+C0h] [bp-4h]@1
  char v110; // [sp+58h] [bp-6Ch]@1
  char v111; // [sp+5Ch] [bp-68h]@1
  __int16 v112; // [sp+78h] [bp-4Ch]@1
  __int16 v113; // [sp+7Ah] [bp-4Ah]@1
  __int16 v114; // [sp+7Ch] [bp-48h]@1
  char *v115; // [sp+1Ch] [bp-A8h]@2
  int v116; // [sp+Ch] [bp-B8h]@2
  char v117; // [sp+3Ch] [bp-88h]@2
  int v118; // [sp+8h] [bp-BCh]@2
  char v119; // [sp+80h] [bp-44h]@2
  char *v120; // [sp+18h] [bp-ACh]@4
  int v121; // [sp+4h] [bp-C0h]@4
  char v122; // [sp+20h] [bp-A4h]@4
  int v123; // [sp+0h] [bp-C4h]@4
  char v124; // [sp+9Ch] [bp-28h]@5
  char v125; // [sp+17h] [bp-ADh]@5

  v107 = (unsigned int)& s ^ dword_43901C;
  v108 = this;
  v109 = 0;
  sub_42C3E0((int)&v110);
  LOBYTE(v109) = 1;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v111);
  v112 = a16;
  v113 = a24;
  v114 = 0;
  if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(&a9, &unk_43279A) )
  {
    v115 = &ST04_1_0;
    v116 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    v118 = sub_401450((int)&v117, ST04_1_0, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, v104, 305);
    LOBYTE(v109) = 2;
    sub_401CB0((int)&v119, (int)&v117);
    LOBYTE(v109) = 1;
    sub_42BCD0((int)&v117);
  }
  if ( BYTE2(a24) )
  {
    v120 = &ST04_1_0;
    v121 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST04_1_0);
    v123 = sub_401450((int)&v122, ST04_1_0, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, v104, 102);
    LOBYTE(v109) = 3;
    sub_401CB0((int)&v119, (int)&v122);
    LOBYTE(v109) = 1;
    sub_42BCD0((int)&v122);
  }
  sub_401700((int)&v124);
  LOBYTE(v109) = 4;
  sub_42D990((int)&v110, (int)&v124, 0);
  v125 = sub_41E760(v108, 19, a97, a98, (int)&v124) == 1;
  LOBYTE(v109) = 1;
  sub_4017F0((int)&v124);
  LOBYTE(v109) = 0;
  sub_42C3B0((int)&v110);
  v109 = -1;
  sub_4078E0((int)&a2);
  return v125;
}

//----- (00422650) --------------------------------------------------------
char __thiscall sub_422650(int this, int a2)
{
  signed int v3; // eax@7
  int v4; // ST08_4@8
  int v5; // eax@8
  int v6; // eax@8
  unsigned int v7; // edx@8
  int v8; // ST08_4@14
  int v9; // eax@14
  int v10; // eax@14
  int v11; // edx@14
  unsigned int v12; // eax@14
  signed int v13; // eax@17
  int v14; // ST08_4@18
  int v15; // eax@18
  int v16; // eax@18
  unsigned int v17; // edx@18
  int  s; // [sp+C8h] [bp+0h]@1
  unsigned int v19; // [sp+B4h] [bp-14h]@1
  int v20; // [sp+0h] [bp-C8h]@1
  unsigned int v21; // [sp+B8h] [bp-10h]@1
  __int16 v22; // [sp+74h] [bp-54h]@4
  signed int v23; // [sp+C4h] [bp-4h]@4
  char v24; // [sp+67h] [bp-61h]@5
  unsigned __int16 v25; // [sp+9Ah] [bp-2Eh]@6
  unsigned __int16 v26; // [sp+98h] [bp-30h]@6
  unsigned __int16 v27; // [sp+96h] [bp-32h]@7
  int v28; // [sp+70h] [bp-58h]@7
  char v29; // [sp+54h] [bp-74h]@8
  char v30; // [sp+4Ch] [bp-7Ch]@8
  int v31; // [sp+5Ch] [bp-6Ch]@8
  unsigned int v32; // [sp+60h] [bp-68h]@8
  char v33; // [sp+44h] [bp-84h]@8
  unsigned __int16 v34; // [sp+94h] [bp-34h]@10
  unsigned int v35; // [sp+68h] [bp-60h]@11
  char v36; // [sp+34h] [bp-94h]@14
  char v37; // [sp+2Ch] [bp-9Ch]@14
  int v38; // [sp+3Ch] [bp-8Ch]@14
  unsigned int v39; // [sp+40h] [bp-88h]@14
  char v40; // [sp+24h] [bp-A4h]@14
  int v41; // [sp+6Ch] [bp-5Ch]@17
  char v42; // [sp+14h] [bp-B4h]@18
  char v43; // [sp+Ch] [bp-BCh]@18
  int v44; // [sp+1Ch] [bp-ACh]@18
  unsigned int v45; // [sp+20h] [bp-A8h]@18
  char v46; // [sp+4h] [bp-C4h]@18

  v19 = (unsigned int)& s ^ dword_43901C;
  v20 = this;
  v21 = 0;
  while ( 1 )
  {
    if ( v21 >= sub_4019B0(a2) )
      return 1;
    sub_42C3E0((int)&v22);
    v23 = 0;
    if ( !(unsigned __int8)sub_42DF60(&v22, a2, v21) )
      break;
    v21 += v25 + v22 + 10;
    if ( !v26 )
    {
      while ( 1 )
      {
        v3 = sub_41AC70(v20, v27);
        v28 = v3;
        if ( v3 < 0 )
          break;
        v4 = v28;
        v5 = sub_402FA0(v20 + 8, (int)&v29);
        v6 = sub_409470(v5, (int)&v30, v4);
        v7 = *(_DWORD *)(v6 + 4);
        v31 = *(_DWORD *)v6;
        v32 = v7;
        sub_408690(v20 + 8, (int)&v33, v31, v7);
      }
    }
    if ( v26 == 1 )
    {
      if ( v34 )
      {
        v35 = 0;
        while ( v35 < sub_4085B0(v20 + 8) )
        {
          if ( *(_WORD *)(sub_4085D0(v20 + 8, v35) + 56) == v34 )
          {
            v8 = v35;
            v9 = sub_402FA0(v20 + 8, (int)&v36);
            v10 = sub_409470(v9, (int)&v37, v8);
            v11 = *(_DWORD *)v10;
            v12 = *(_DWORD *)(v10 + 4);
            v38 = v11;
            v39 = v12;
            sub_408690(v20 + 8, (int)&v40, v11, v12);
          }
          else
          {
            ++v35;
          }
        }
        while ( 1 )
        {
          v13 = sub_41AB50(v20, v34);
          v41 = v13;
          if ( v13 < 0 )
            break;
          v14 = v41;
          v15 = sub_402FA0(v20 + 32, (int)&v42);
          v16 = sub_40F0F0(v15, (int)&v43, v14);
          v17 = *(_DWORD *)(v16 + 4);
          v44 = *(_DWORD *)v16;
          v45 = v17;
          sub_408900(v20 + 32, (int)&v46, v44, v17);
        }
      }
    }
    v23 = -1;
    sub_42C3B0((int)&v22);
  }
  v24 = 0;
  v23 = -1;
  sub_42C3B0((int)&v22);
  return v24;
}

//----- (004228D0) --------------------------------------------------------
char __thiscall sub_4228D0(int this, int a2)
{
  int v3; // eax@10
  signed int v4; // eax@14
  int v5; // eax@15
  signed int v6; // eax@20
  int v7; // eax@21
  int v8; // eax@26
  signed int v9; // eax@26
  int v10; // ST04_4@27
  int v11; // eax@27
  int  s; // [sp+214h] [bp+0h]@1
  unsigned int v13; // [sp+200h] [bp-14h]@1
  int v14; // [sp+0h] [bp-214h]@1
  unsigned int v15; // [sp+204h] [bp-10h]@1
  unsigned int v16; // [sp+Ch] [bp-208h]@3
  __int16 v17; // [sp+1C0h] [bp-54h]@4
  signed int v18; // [sp+210h] [bp-4h]@4
  unsigned __int16 v19; // [sp+1E6h] [bp-2Eh]@6
  unsigned __int16 v20; // [sp+1E4h] [bp-30h]@6
  char v21; // [sp+38h] [bp-1DCh]@7
  unsigned __int16 v22; // [sp+1E0h] [bp-34h]@7
  unsigned __int16 v23; // [sp+70h] [bp-1A4h]@7
  unsigned __int16 v24; // [sp+1E2h] [bp-32h]@7
  unsigned __int16 v25; // [sp+90h] [bp-184h]@7
  char v26; // [sp+54h] [bp-1C0h]@7
  char v27; // [sp+74h] [bp-1A0h]@7
  char v28; // [sp+92h] [bp-182h]@7
  unsigned int v29; // [sp+34h] [bp-1E0h]@7
  char v30; // [sp+1E8h] [bp-2Ch]@8
  unsigned int v31; // [sp+1BCh] [bp-58h]@14
  unsigned __int16 v32; // [sp+10h] [bp-204h]@20
  char v33; // [sp+14h] [bp-200h]@20
  unsigned int v34; // [sp+30h] [bp-1E4h]@20
  unsigned int v35; // [sp+8h] [bp-20Ch]@26

  v13 = (unsigned int)& s ^ dword_43901C;
  v14 = this;
  v15 = 0;
  while ( v15 < sub_4019B0(a2) )
  {
    sub_42C3E0((int)&v17);
    v18 = 0;
    if ( !(unsigned __int8)sub_42DF60(&v17, a2, v15) )
    {
      v18 = -1;
      sub_42C3B0((int)&v17);
      return 0;
    }
    v15 += v19 + v17 + 10;
    if ( !v20 )
    {
      sub_406400();
      LOBYTE(v18) = 1;
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v21);
      v23 = v22;
      v25 = v24;
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v26, &unk_4325C7);
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v27, &unk_4325CB);
      v28 = 0;
      v29 = 0;
      while ( v29 < sub_4095F0((int)&v30) )
      {
        if ( *(_WORD *)sub_401C80((int)&v30, v29) == 305 )
        {
          v3 = sub_401C80((int)&v30, v29);
          sub_42BBE0(v3, (int)&v26);
        }
        if ( *(_WORD *)sub_401C80((int)&v30, v29) == 102 )
          v28 = 1;
        ++v29;
      }
      v4 = sub_41AC70(v14, v25);
      v31 = v4;
      if ( v4 < 0 )
      {
        sub_408610(v14 + 8, (int)&v21);
      }
      else
      {
        v5 = sub_4085D0(v14 + 8, v31);
        sub_407C90(v5, (int)&v21);
      }
      LOBYTE(v18) = 0;
      sub_4078E0((int)&v21);
    }
    if ( v20 == 1 )
    {
      if ( v22 )
      {
        sub_407EF0();
        LOBYTE(v18) = 2;
        v32 = v22;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v33);
        v6 = sub_41AB50(v14, v32);
        v34 = v6;
        if ( v6 < 0 )
        {
          sub_408880(v14 + 32, (int)&v32);
        }
        else
        {
          v7 = sub_408850(v14 + 32, v34);
          sub_407FC0(v7, (int)&v32);
        }
        LOBYTE(v18) = 0;
        sub_407F10((int)&v32);
      }
    }
    v18 = -1;
    sub_42C3B0((int)&v17);
  }
  v16 = 0;
  while ( v16 < sub_4085B0(v14 + 8) )
  {
    v8 = sub_4085D0(v14 + 8, v16);
    v9 = sub_41AB50(v14, *(_WORD *)(v8 + 56));
    v35 = v9;
    if ( v9 >= 0 )
    {
      v10 = sub_408850(v14 + 32, v35) + 4;
      v11 = sub_4085D0(v14 + 8, v16);
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v11 + 60);
    }
    ++v16;
  }
  return 1;
}

//----- (00422C50) --------------------------------------------------------
signed int __thiscall sub_422C50(int this, int a2)
{
  int ST20_4_0; // ST20_4@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  unsigned int v5; // ST1C_4@1
  signed int result; // eax@2
  int v8; // eax@15
  int v9; // eax@17
  int v10; // eax@27
  int v11; // ST18_4@28
  int v12; // eax@28
  int v13; // eax@28
  int v14; // eax@28
  unsigned int v15; // edx@28
  int v16; // eax@28
  unsigned int v17; // edx@28
  int  s; // [sp+F4h] [bp+0h]@1
  unsigned int v19; // [sp+7Ch] [bp-78h]@1
  int v20; // [sp+4h] [bp-F0h]@1
  int v21; // [sp+E4h] [bp-10h]@1
  unsigned __int8 v22; // [sp+C4h] [bp-30h]@3
  signed int v23; // [sp+F0h] [bp-4h]@3
  signed int v24; // [sp+50h] [bp-A4h]@5
  signed int v25; // [sp+E0h] [bp-14h]@8
  signed int v26; // [sp+4Ch] [bp-A8h]@9
  signed int v27; // [sp+48h] [bp-ACh]@12
  char v28; // [sp+84h] [bp-70h]@14
  char v29; // [sp+C8h] [bp-2Ch]@14
  unsigned __int16 v30; // [sp+58h] [bp-9Ch]@15
  int v31; // [sp+5Ch] [bp-98h]@15
  char v32; // [sp+60h] [bp-94h]@17
  int v33; // [sp+80h] [bp-74h]@17
  int v34; // [sp-1Ch] [bp-110h]@19
  int *v35; // [sp+44h] [bp-B0h]@19
  int v36; // [sp+0h] [bp-F4h]@19
  signed int v37; // [sp+40h] [bp-B4h]@20
  unsigned __int16 v38; // [sp+A0h] [bp-54h]@23
  __int16 v39; // [sp+A4h] [bp-50h]@25
  char v40; // [sp+ACh] [bp-48h]@26
  u_short v41; // [sp+54h] [bp-A0h]@27
  char v42; // [sp+30h] [bp-C4h]@28
  char v43; // [sp+28h] [bp-CCh]@28
  char v44; // [sp+20h] [bp-D4h]@28
  int v45; // [sp+38h] [bp-BCh]@28
  unsigned int v46; // [sp+3Ch] [bp-B8h]@28
  char v47; // [sp+10h] [bp-E4h]@28
  int v48; // [sp+18h] [bp-DCh]@28
  unsigned int v49; // [sp+1Ch] [bp-D8h]@28
  char v50; // [sp+8h] [bp-ECh]@28
  unsigned __int16 v51; // [sp+A2h] [bp-52h]@31
  int v52; // [sp+A8h] [bp-4Ch]@33

  v19 = (unsigned int)& s ^ dword_43901C;
  v5 = (unsigned int)& s ^ dword_43901C;
  v20 = this;
  v21 = *(_DWORD *)(this + 764);
  sub_4172B0(*(_DWORD *)(this + 728), 0x12Cu, 0);
  if ( sub_417360(*(_DWORD *)(v20 + 728), a2) )
  {
    (*(int (__thiscall **)(int))(*(_DWORD *)v20 + 4))(v20);
    result = 1;
  }
  else
  {
    while ( 1 )
    {
      sub_42C1E0((int)&v22);
      v23 = 0;
      do
      {
        if ( *(_BYTE *)(v20 + 768) )
        {
          *(_BYTE *)(v20 + 768) = 0;
          v24 = -2;
          v23 = -1;
          sub_42BD10((int)&v22);
          return v24;
        }
        if ( sub_42D310((int)&v22, *(_DWORD *)(v20 + 600)) )
          break;
        if ( v25 != -2 )
        {
          v26 = v25;
          v23 = -1;
          sub_42BD10((int)&v22);
          return v26;
        }
      }
      while ( v21-- != 1 );
      if ( !v21 )
      {
        v27 = -2;
        v23 = -1;
        sub_42BD10((int)&v22);
        return v27;
      }
      if ( v22 == 4 )
        break;
      if ( v22 == 2 )
      {
        sub_42C080((int)&v38);
        LOBYTE(v23) = 3;
        if ( sub_42D1C0(&v38, (int)&v29, 0) )
        {
          if ( v39 & 0x8000 )
          {
            if ( (unsigned int)sub_4019B0((int)&v40) >= 2 )
            {
              v10 = sub_4019D0((int)&v40, 0);
              memcpy(&v41, (const void *)v10, 2u);
              v41 = ntohs(v41);
              if ( sub_4019B0((int)&v40) >= (unsigned int)v41 + 2 )
              {
                v11 = v41;
                v12 = sub_402FA0((int)&v40, (int)&v42);
                v13 = sub_401EE0(v12, (int)&v43, 2);
                v14 = sub_401EE0(v13, (int)&v44, v11);
                v15 = *(_DWORD *)(v14 + 4);
                v45 = *(_DWORD *)v14;
                v46 = v15;
                v16 = sub_402FA0((int)&v40, (int)&v47);
                v17 = *(_DWORD *)(v16 + 4);
                v48 = *(_DWORD *)v16;
                v49 = v17;
                sub_4020E0((int)&v40, (int)&v50, v48, v17, v45, v46);
              }
            }
          }
          if ( (v38 == *(_WORD *)a2 || !*(_WORD *)a2)
            && (v51 == *(_WORD *)(a2 + 2) || !*(_WORD *)(a2 + 2))
            && (v52 == *(_DWORD *)(a2 + 8) || !*(_DWORD *)(a2 + 8)) )
          {
            sub_407F60(a2, (int)&v38);
            LOBYTE(v23) = 0;
            naticq_event();
            v23 = -1;
            sub_42BD10((int)&v22);
            return 1;
          }
          sub_417460(*(_DWORD *)(v20 + 728), (int)&v38);
          LOBYTE(v23) = 0;
          naticq_event();
          v23 = -1;
          sub_42BD10((int)&v22);
        }
        else
        {
          LOBYTE(v23) = 0;
          naticq_event();
          v23 = -1;
          sub_42BD10((int)&v22);
        }
      }
      else
      {
        v23 = -1;
        sub_42BD10((int)&v22);
      }
    }
    sub_42CD00((int)&v28);
    LOBYTE(v23) = 1;
    if ( sub_42E800((int)&v28, (int)&v29, 0) )
    {
      v30 = 0;
      v8 = sub_42BB80((int)&v28, 9u);
      v31 = v8;
      if ( v8 )
        sub_42BC70(v31, (int)&v30);
      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
        &v32,
        v5,
        ST20_4_0,
        ST24_4_0,
        ST28_4_0);
      LOBYTE(v23) = 2;
      v9 = sub_42BB80((int)&v28, 0xBu);
      v33 = v9;
      if ( v9 )
        sub_42BBE0(v33, (int)&v32);
      v35 = &v34;
      v36 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v32);
      (*(int (__thiscall **)(int, _DWORD))(*(_DWORD *)v20 + 52))(v20, v30);
      LOBYTE(v23) = 1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v32);
    }
    v37 = 0;
    LOBYTE(v23) = 0;
    sub_42CCE0((int)&v28);
    v23 = -1;
    sub_42BD10((int)&v22);
    result = v37;
  }
  return result;
}

//----- (00423100) --------------------------------------------------------
char __thiscall sub_423100(int this, int a2)
{
  int v3; // eax@1
  int v4; // [sp+Ch] [bp-6Ch]@1
  char v5; // [sp+30h] [bp-48h]@1
  signed int v6; // [sp+74h] [bp-4h]@1
  __int16 v7; // [sp+32h] [bp-46h]@1
  char v8; // [sp+50h] [bp-28h]@1
  char v9; // [sp+14h] [bp-64h]@1
  int v10; // [sp+8h] [bp-70h]@1
  int v11; // [sp+4h] [bp-74h]@1
  char v12; // [sp+54h] [bp-24h]@1
  char v13; // [sp+34h] [bp-44h]@1
  char v14; // [sp+13h] [bp-65h]@1

  v4 = this;
  sub_42C1E0((int)&v5);
  v6 = 0;
  v5 = 1;
  v7 = *(_WORD *)(v4 + 604)++;
  sub_42DDD0((int)&v8);
  LOBYTE(v6) = 1;
  v3 = sub_4014E0((int)&v9, a2, 6);
  v10 = v3;
  v11 = v3;
  LOBYTE(v6) = 2;
  sub_401CB0((int)&v12, v3);
  LOBYTE(v6) = 1;
  sub_42BCD0((int)&v9);
  sub_42DEE0((int)&v8, (int)&v13, 0);
  v14 = sub_42C0A0((int)&v5, *(_DWORD *)(v4 + 600));
  LOBYTE(v6) = 0;
  sub_42DDB0((int)&v8);
  v6 = -1;
  sub_42BD10((int)&v5);
  return v14;
}

//----- (00423200) --------------------------------------------------------
char __thiscall sub_423200(int this, int a2, int a3, int a4)
{
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  unsigned int v6; // ST0C_4@1
  int v7; // ST18_4@1
  char result; // al@5
  int v10; // eax@13
  int v11; // eax@14
  int v12; // eax@17
  int v13; // eax@21
  int v14; // eax@24
  int v15; // eax@24
  int v16; // eax@24
  int  s; // [sp+B0h] [bp+0h]@1
  unsigned int v18; // [sp+98h] [bp-18h]@1
  unsigned __int8 v19; // [sp+5Ch] [bp-54h]@1
  signed int v20; // [sp+ACh] [bp-4h]@1
  int v21; // [sp+54h] [bp-5Ch]@1
  signed int v22; // [sp+78h] [bp-38h]@4
  char v23; // [sp+33h] [bp-7Dh]@5
  char v24; // [sp+38h] [bp-78h]@11
  char v25; // [sp+60h] [bp-50h]@11
  int v26; // [sp+58h] [bp-58h]@13
  int v27; // [sp+34h] [bp-7Ch]@14
  int v28; // [sp+A0h] [bp-10h]@17
  char v29; // [sp+7Ch] [bp-34h]@19
  unsigned int v30; // [sp+9Ch] [bp-14h]@21
  char v31; // [sp+10h] [bp-A0h]@24

  v18 = (unsigned int)& s ^ dword_43901C;
  v6 = (unsigned int)& s ^ dword_43901C;
  v7 = this;
  sub_42C1E0((int)&v19);
  v20 = 0;
  v21 = *(_DWORD *)(v7 + 764);
  do
  {
    if ( sub_42D310((int)&v19, *(_DWORD *)(v7 + 600)) )
      break;
    if ( v22 != -2 )
    {
      v23 = v22 != 0;
      v20 = -1;
      sub_42BD10((int)&v19);
      return v23;
    }
  }
  while ( v21-- != 1 );
  if ( v21 )
  {
    if ( v19 == 4 )
    {
      sub_42CD00((int)&v24);
      LOBYTE(v20) = 1;
      if ( sub_42E800((int)&v24, (int)&v25, 0) )
      {
        v10 = sub_42BB80((int)&v24, 8u);
        v26 = v10;
        if ( v10 )
        {
          sub_42BC70(v26, v7 + 320);
          v11 = sub_42BB80((int)&v24, 4u);
          v27 = v11;
          if ( v11 )
            sub_42BBE0(v27, v7 + 324);
          LOBYTE(v20) = 0;
          sub_42CCE0((int)&v24);
          v20 = -1;
          sub_42BD10((int)&v19);
          result = 0;
        }
        else
        {
          v12 = sub_42BB80((int)&v24, 5u);
          v28 = v12;
          if ( v12 )
          {
            std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
              &v29,
              v6,
              ST10_4_0,
              ST14_4_0,
              v7);
            LOBYTE(v20) = 2;
            if ( sub_42BBE0(v28, (int)&v29) )
            {
              v13 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(&v29, L":", 0);
              v30 = v13;
              if ( v13 != (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos
                && v30 < std__basic_string_char_std__char_traits_char__std__allocator_char____length(&v29) - 1 )
              {
                std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, &v29, 0, v30);
                v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                        &v31,
                        &v29,
                        v30 + 1,
                        std__basic_string_char_std__char_traits_char__std__allocator_char____npos);
                LOBYTE(v20) = 3;
                v15 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(v14);
                *(_DWORD *)a3 = atoi((const char *)v15);
                LOBYTE(v20) = 2;
                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
                v16 = sub_42BB80((int)&v24, 6u);
                v28 = v16;
                if ( v16 )
                {
                  sub_401810(a4, v28 + 4);
                  LOBYTE(v20) = 1;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v29);
                  LOBYTE(v20) = 0;
                  sub_42CCE0((int)&v24);
                  v20 = -1;
                  sub_42BD10((int)&v19);
                  result = 1;
                }
                else
                {
                  LOBYTE(v20) = 1;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v29);
                  LOBYTE(v20) = 0;
                  sub_42CCE0((int)&v24);
                  v20 = -1;
                  sub_42BD10((int)&v19);
                  result = 0;
                }
              }
              else
              {
                LOBYTE(v20) = 1;
                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v29);
                LOBYTE(v20) = 0;
                sub_42CCE0((int)&v24);
                v20 = -1;
                sub_42BD10((int)&v19);
                result = 0;
              }
            }
            else
            {
              LOBYTE(v20) = 1;
              std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v29);
              LOBYTE(v20) = 0;
              sub_42CCE0((int)&v24);
              v20 = -1;
              sub_42BD10((int)&v19);
              result = 0;
            }
          }
          else
          {
            LOBYTE(v20) = 0;
            sub_42CCE0((int)&v24);
            v20 = -1;
            sub_42BD10((int)&v19);
            result = 0;
          }
        }
      }
      else
      {
        LOBYTE(v20) = 0;
        sub_42CCE0((int)&v24);
        v20 = -1;
        sub_42BD10((int)&v19);
        result = 0;
      }
    }
    else
    {
      v20 = -1;
      sub_42BD10((int)&v19);
      result = 0;
    }
  }
  else
  {
    v20 = -1;
    sub_42BD10((int)&v19);
    result = 0;
  }
  return result;
}

//----- (004235D0) --------------------------------------------------------
char __fastcall sub_4235D0(int a1)
{
  char ST24_1_0; // ST24_1@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  int ST3C_4_0; // ST3C_4@0
  int v9; // eax@1
  char v10; // ST04_1@1
  int v11; // eax@1
  char v12; // ST20_1@1
  int v13; // ST24_4@1
  int v14; // ST28_4@1
  int v15; // ST2C_4@1
  int v16; // ST30_4@1
  int v17; // ST34_4@1
  int v18; // ST38_4@1
  __int16 v19; // ST3C_2@1
  int v20; // eax@1
  int v21; // ST20_4@1
  int v22; // ST24_4@1
  int v23; // ST28_4@1
  int v24; // ST2C_4@1
  int v25; // ST30_4@1
  int v26; // ST34_4@1
  __int16 v27; // ST38_2@1
  int v28; // eax@1
  int v29; // eax@1
  int v30; // eax@1
  int v31; // eax@1
  int v32; // eax@1
  int v33; // eax@1
  int v34; // eax@1
  char v35; // ST1C_1@1
  int v36; // ST20_4@1
  int v37; // ST24_4@1
  int v38; // ST28_4@1
  int v39; // ST2C_4@1
  int v40; // ST30_4@1
  int v41; // ST34_4@1
  int v42; // eax@1
  char v43; // ST1C_1@1
  int v44; // ST20_4@1
  int v45; // ST24_4@1
  int v46; // ST28_4@1
  int v47; // ST2C_4@1
  int v48; // ST30_4@1
  int v49; // ST34_4@1
  int v50; // eax@1
  unsigned int v51; // eax@1
  int v52; // ST38_4@1
  int v53; // ST34_4@1
  int v54; // eax@1
  int v55; // [sp+7Ch] [bp-1B8h]@1
  char v56; // [sp+1D0h] [bp-64h]@1
  signed int v57; // [sp+230h] [bp-4h]@1
  char v58; // [sp+1ECh] [bp-48h]@1
  __int16 v59; // [sp+1EEh] [bp-46h]@1
  char v60; // [sp+1F0h] [bp-44h]@1
  char *v61; // [sp+1B0h] [bp-84h]@1
  int v62; // [sp+78h] [bp-1BCh]@1
  char v63; // [sp+1B4h] [bp-80h]@1
  int v64; // [sp+74h] [bp-1C0h]@1
  int v65; // [sp+70h] [bp-1C4h]@1
  char v66; // [sp+1D4h] [bp-60h]@1
  char *v67; // [sp+190h] [bp-A4h]@1
  int v68; // [sp-3Ch] [bp-270h]@1
  int *v69; // [sp+18Ch] [bp-A8h]@1
  int v70; // [sp+6Ch] [bp-1C8h]@1
  int v71; // [sp+68h] [bp-1CCh]@1
  int v72; // [sp+64h] [bp-1D0h]@1
  char v73; // [sp+194h] [bp-A0h]@1
  int v74; // [sp+60h] [bp-1D4h]@1
  int v75; // [sp+5Ch] [bp-1D8h]@1
  char *v76; // [sp+16Ch] [bp-C8h]@1
  int v77; // [sp+58h] [bp-1DCh]@1
  char v78; // [sp+170h] [bp-C4h]@1
  int v79; // [sp+54h] [bp-1E0h]@1
  int v80; // [sp+50h] [bp-1E4h]@1
  char v81; // [sp+150h] [bp-E4h]@1
  int v82; // [sp+4Ch] [bp-1E8h]@1
  int v83; // [sp+48h] [bp-1ECh]@1
  char v84; // [sp+134h] [bp-100h]@1
  int v85; // [sp+44h] [bp-1F0h]@1
  int v86; // [sp+40h] [bp-1F4h]@1
  char v87; // [sp+118h] [bp-11Ch]@1
  int v88; // [sp+3Ch] [bp-1F8h]@1
  int v89; // [sp+38h] [bp-1FCh]@1
  char v90; // [sp+FCh] [bp-138h]@1
  int v91; // [sp+34h] [bp-200h]@1
  int v92; // [sp+30h] [bp-204h]@1
  char v93; // [sp+E0h] [bp-154h]@1
  int v94; // [sp+2Ch] [bp-208h]@1
  int v95; // [sp+28h] [bp-20Ch]@1
  char v96; // [sp+C4h] [bp-170h]@1
  int v97; // [sp+24h] [bp-210h]@1
  int v98; // [sp+20h] [bp-214h]@1
  char *v99; // [sp+A4h] [bp-190h]@1
  int v100; // [sp+1Ch] [bp-218h]@1
  char v101; // [sp+A8h] [bp-18Ch]@1
  int v102; // [sp+18h] [bp-21Ch]@1
  int v103; // [sp+14h] [bp-220h]@1
  char *v104; // [sp+84h] [bp-1B0h]@1
  int v105; // [sp+10h] [bp-224h]@1
  char v106; // [sp+88h] [bp-1ACh]@1
  int v107; // [sp+Ch] [bp-228h]@1
  int v108; // [sp+8h] [bp-22Ch]@1
  char v109; // [sp+210h] [bp-24h]@1
  int v110; // [sp+20Ch] [bp-28h]@1
  char v111; // [sp+83h] [bp-1B1h]@1

  v55 = a1;
  sub_42CD00((int)&v56);
  v57 = 0;
  sub_42C1E0((int)&v58);
  LOBYTE(v57) = 1;
  v58 = 1;
  v59 = *(_WORD *)(v55 + 604)++;
  sub_401990((int)&v60, 4u);
  *(_BYTE *)sub_4019D0((int)&v60, 3u) = 1;
  v61 = &ST24_1_0;
  v62 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(v55 + 416);
  v9 = sub_401450((int)&v63, ST24_1_0, ST28_4_0, ST2C_4_0, ST30_4_0, ST34_4_0, ST38_4_0, ST3C_4_0, 1);
  v64 = v9;
  v65 = v9;
  LOBYTE(v57) = 2;
  sub_401CB0((int)&v66, v9);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v63);
  v67 = &ST24_1_0;
  v69 = &v68;
  v70 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(v55 + 536);
  v11 = sub_41A800((int)&ST24_1_0, v10);
  v71 = v11;
  v72 = v11;
  v20 = sub_401450((int)&v73, v12, v13, v14, v15, v16, v17, v18, v19);
  v74 = v20;
  v75 = v20;
  LOBYTE(v57) = 3;
  sub_401CB0((int)&v66, v20);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v73);
  v76 = &v12;
  v77 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v12);
  v28 = sub_401450(
          (int)&v78,
          (char)"ICQ Inc. - Product of ICQ (TM).2003b.5.56.1.3916.85",
          v21,
          v22,
          v23,
          v24,
          v25,
          v26,
          v27);
  v79 = v28;
  v80 = v28;
  LOBYTE(v57) = 4;
  sub_401CB0((int)&v66, v28);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v78);
  v29 = sub_401370((int)&v81, 0x10Au, 22);
  v82 = v29;
  v83 = v29;
  LOBYTE(v57) = 5;
  sub_401CB0((int)&v66, v29);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v81);
  v30 = sub_401370((int)&v84, 5u, 23);
  v85 = v30;
  v86 = v30;
  LOBYTE(v57) = 6;
  sub_401CB0((int)&v66, v30);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v84);
  v31 = sub_401370((int)&v87, 0x25u, 24);
  v88 = v31;
  v89 = v31;
  LOBYTE(v57) = 7;
  sub_401CB0((int)&v66, v31);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v87);
  v32 = sub_401370((int)&v90, 1u, 25);
  v91 = v32;
  v92 = v32;
  LOBYTE(v57) = 8;
  sub_401CB0((int)&v66, v32);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v90);
  v33 = sub_401370((int)&v93, 0xE90u, 26);
  v94 = v33;
  v95 = v33;
  LOBYTE(v57) = 9;
  sub_401CB0((int)&v66, v33);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v93);
  v34 = sub_4013E0((int)&v96, 0x55u, 20);
  v97 = v34;
  v98 = v34;
  LOBYTE(v57) = 10;
  sub_401CB0((int)&v66, v34);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v96);
  v99 = &v35;
  v100 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
  v42 = sub_401450((int)&v101, v35, v36, v37, v38, v39, v40, v41, 15);
  v102 = v42;
  v103 = v42;
  LOBYTE(v57) = 11;
  sub_401CB0((int)&v66, v42);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v101);
  v104 = &v35;
  v105 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v35);
  v50 = sub_401450((int)&v106, v43, v44, v45, v46, v47, v48, v49, 14);
  v107 = v50;
  v108 = v50;
  LOBYTE(v57) = 12;
  sub_401CB0((int)&v66, v50);
  LOBYTE(v57) = 1;
  sub_42BCD0((int)&v106);
  sub_401700((int)&v109);
  LOBYTE(v57) = 13;
  sub_42DDF0((int)&v56, (int)&v109, 0);
  v110 = sub_4019B0((int)&v60);
  v51 = v110 + sub_4019B0((int)&v109);
  v110 = v51;
  sub_401990((int)&v60, v51);
  v52 = sub_4019B0((int)&v109);
  v53 = sub_4019D0((int)&v109, 0);
  v54 = sub_4019D0((int)&v60, 4u);
  memcpy((void *)v54, (const void *)v53, v52);
  v111 = sub_42C0A0((int)&v58, *(_DWORD *)(v55 + 600));
  LOBYTE(v57) = 1;
  sub_4017F0((int)&v109);
  LOBYTE(v57) = 0;
  sub_42BD10((int)&v58);
  v57 = -1;
  sub_42CCE0((int)&v56);
  return v111;
}

//----- (00423AC0) --------------------------------------------------------
char __thiscall sub_423AC0(int this, int a2, char a3)
{
  char result; // al@6
  int v4; // eax@1
  int v5; // eax@2
  int v6; // eax@3
  int v7; // eax@4
  int  s; // [sp+104h] [bp+0h]@1
  unsigned int v9; // [sp+DCh] [bp-28h]@1
  int v10; // [sp+20h] [bp-E4h]@1
  char v11; // [sp+E0h] [bp-24h]@1
  signed int v12; // [sp+100h] [bp-4h]@1
  char v13; // [sp+98h] [bp-6Ch]@1
  char v14; // [sp+7Ch] [bp-88h]@1
  int v15; // [sp+1Ch] [bp-E8h]@1
  int v16; // [sp+18h] [bp-ECh]@1
  char v17; // [sp+9Ch] [bp-68h]@1
  char v18; // [sp+60h] [bp-A4h]@2
  int v19; // [sp+14h] [bp-F0h]@2
  int v20; // [sp+10h] [bp-F4h]@2
  char v21; // [sp+B4h] [bp-50h]@3
  char v22; // [sp+B5h] [bp-4Fh]@3
  char v23; // [sp+B6h] [bp-4Eh]@3
  char v24; // [sp+B7h] [bp-4Dh]@3
  char v25; // [sp+B8h] [bp-4Ch]@3
  char v26; // [sp+B9h] [bp-4Bh]@3
  char v27; // [sp+BAh] [bp-4Ah]@3
  char v28; // [sp+BBh] [bp-49h]@3
  char v29; // [sp+BCh] [bp-48h]@3
  char v30; // [sp+BDh] [bp-47h]@3
  char v31; // [sp+BEh] [bp-46h]@3
  char v32; // [sp+BFh] [bp-45h]@3
  char v33; // [sp+C0h] [bp-44h]@3
  char v34; // [sp+C1h] [bp-43h]@3
  char v35; // [sp+C2h] [bp-42h]@3
  char v36; // [sp+C3h] [bp-41h]@3
  char v37; // [sp+C4h] [bp-40h]@3
  char v38; // [sp+C5h] [bp-3Fh]@3
  char v39; // [sp+C6h] [bp-3Eh]@3
  char v40; // [sp+C7h] [bp-3Dh]@3
  char v41; // [sp+C8h] [bp-3Ch]@3
  char v42; // [sp+C9h] [bp-3Bh]@3
  char v43; // [sp+CAh] [bp-3Ah]@3
  char v44; // [sp+CBh] [bp-39h]@3
  char v45; // [sp+CCh] [bp-38h]@3
  char v46; // [sp+CDh] [bp-37h]@3
  char v47; // [sp+CEh] [bp-36h]@3
  char v48; // [sp+CFh] [bp-35h]@3
  char v49; // [sp+D0h] [bp-34h]@3
  char v50; // [sp+D1h] [bp-33h]@3
  char v51; // [sp+D2h] [bp-32h]@3
  char v52; // [sp+D3h] [bp-31h]@3
  char v53; // [sp+D4h] [bp-30h]@3
  char v54; // [sp+D5h] [bp-2Fh]@3
  char v55; // [sp+D6h] [bp-2Eh]@3
  char v56; // [sp+D7h] [bp-2Dh]@3
  char v57; // [sp+D8h] [bp-2Ch]@3
  char v58; // [sp+44h] [bp-C0h]@3
  int v59; // [sp+Ch] [bp-F8h]@3
  int v60; // [sp+8h] [bp-FCh]@3
  char v61; // [sp+28h] [bp-DCh]@4
  int v62; // [sp+4h] [bp-100h]@4
  int v63; // [sp+0h] [bp-104h]@4

  v9 = (unsigned int)& s ^ dword_43901C;
  v10 = this;
  sub_401700((int)&v11);
  v12 = 0;
  sub_42CD00((int)&v13);
  LOBYTE(v12) = 1;
  v4 = sub_4013E0((int)&v14, a2 | 0x1000000, 6);
  v15 = v4;
  v16 = v4;
  LOBYTE(v12) = 2;
  sub_401CB0((int)&v17, v4);
  LOBYTE(v12) = 1;
  sub_42BCD0((int)&v14);
  if ( a3 )
  {
    v5 = sub_401370((int)&v18, 0, 8);
    v19 = v5;
    v20 = v5;
    LOBYTE(v12) = 3;
    sub_401CB0((int)&v17, v5);
    LOBYTE(v12) = 1;
    sub_42BCD0((int)&v18);
  }
  v21 = 0;
  v22 = 0;
  v23 = 0;
  v24 = 0;
  v25 = 0;
  v26 = 0;
  v27 = 0;
  v28 = 0;
  v29 = 4;
  v30 = 0;
  v31 = 9;
  v32 = 10;
  v33 = 11;
  v34 = 51;
  v35 = 69;
  v36 = 0;
  v37 = 0;
  v38 = 11;
  v39 = -11;
  v40 = 0;
  v41 = 0;
  v42 = 0;
  v43 = 1;
  v44 = 0;
  v45 = 0;
  v46 = 0;
  v47 = 0;
  v48 = 0;
  v49 = 0;
  v50 = 0;
  v51 = 0;
  v52 = 0;
  v53 = 0;
  v54 = 0;
  v55 = 0;
  v56 = 0;
  v57 = 0;
  v6 = sub_401550((int)&v58, (int)&v21, 37, 12);
  v59 = v6;
  v60 = v6;
  LOBYTE(v12) = 4;
  sub_401CB0((int)&v17, v6);
  LOBYTE(v12) = 1;
  sub_42BCD0((int)&v58);
  if ( a3 )
  {
    v7 = sub_401370((int)&v61, 0, 31);
    v62 = v7;
    v63 = v7;
    LOBYTE(v12) = 5;
    sub_401CB0((int)&v17, v7);
    LOBYTE(v12) = 1;
    sub_42BCD0((int)&v61);
  }
  sub_42DDF0((int)&v13, (int)&v11, 0);
  if ( sub_41E760(v10, 1, 30, 0, (int)&v11) == 1 )
  {
    LOBYTE(v12) = 0;
    sub_42CCE0((int)&v13);
    v12 = -1;
    sub_4017F0((int)&v11);
    result = 1;
  }
  else
  {
    LOBYTE(v12) = 0;
    sub_42CCE0((int)&v13);
    v12 = -1;
    sub_4017F0((int)&v11);
    result = 0;
  }
  return result;
}

//----- (00423D60) --------------------------------------------------------
char __thiscall sub_423D60(int this, int a2)
{
  int v3; // [sp+4h] [bp-38h]@1
  __int16 v4; // [sp+Ch] [bp-30h]@1
  signed int v5; // [sp+38h] [bp-4h]@1
  __int16 v6; // [sp+Eh] [bp-2Eh]@1
  int v7; // [sp+14h] [bp-28h]@1
  char v8; // [sp+Bh] [bp-31h]@1

  v3 = this;
  sub_42C080((int)&v4);
  v5 = 0;
  v4 = 19;
  v6 = 3;
  v7 = a2;
  v8 = sub_422C50(v3, (int)&v4) == 1;
  v5 = -1;
  naticq_event();
  return v8;
}

//----- (00423DF0) --------------------------------------------------------
char __thiscall sub_423DF0(int this, int a2)
{
  int v3; // [sp+4h] [bp-38h]@1
  __int16 v4; // [sp+Ch] [bp-30h]@1
  signed int v5; // [sp+38h] [bp-4h]@1
  __int16 v6; // [sp+Eh] [bp-2Eh]@1
  int v7; // [sp+14h] [bp-28h]@1
  char v8; // [sp+Bh] [bp-31h]@1

  v3 = this;
  sub_42C080((int)&v4);
  v5 = 0;
  v4 = 9;
  v6 = 3;
  v7 = a2;
  v8 = sub_422C50(v3, (int)&v4) == 1;
  v5 = -1;
  naticq_event();
  return v8;
}

//----- (00423E80) --------------------------------------------------------
char __thiscall sub_423E80(int this, int a2)
{
  char result; // al@2
  int v3; // [sp+4h] [bp-48h]@1
  __int16 v4; // [sp+Ch] [bp-40h]@1
  signed int v5; // [sp+48h] [bp-4h]@1
  __int16 v6; // [sp+Eh] [bp-3Eh]@1
  int v7; // [sp+14h] [bp-38h]@1
  char v8; // [sp+30h] [bp-1Ch]@3
  char v9; // [sp+18h] [bp-34h]@3

  v3 = this;
  sub_42C080((int)&v4);
  v5 = 0;
  v4 = 4;
  v6 = 5;
  v7 = a2;
  if ( sub_422C50(v3, (int)&v4) == 1 )
  {
    _LocaleUpdate__GetLocaleT();
    if ( sub_42B1A0(&v8, (int)&v9, 0) )
    {
      std___Init_locks____Init_locks();
      v5 = -1;
      naticq_event();
      result = 1;
    }
    else
    {
      std___Init_locks____Init_locks();
      v5 = -1;
      naticq_event();
      result = 0;
    }
  }
  else
  {
    v5 = -1;
    naticq_event();
    result = 0;
  }
  return result;
}

//----- (00423F70) --------------------------------------------------------
char __thiscall sub_423F70(int this, int a2)
{
  int v3; // [sp+4h] [bp-38h]@1
  __int16 v4; // [sp+Ch] [bp-30h]@1
  signed int v5; // [sp+38h] [bp-4h]@1
  __int16 v6; // [sp+Eh] [bp-2Eh]@1
  int v7; // [sp+14h] [bp-28h]@1
  char v8; // [sp+Bh] [bp-31h]@1

  v3 = this;
  sub_42C080((int)&v4);
  v5 = 0;
  v4 = 3;
  v6 = 3;
  v7 = a2;
  v8 = sub_422C50(v3, (int)&v4) == 1;
  v5 = -1;
  naticq_event();
  return v8;
}

//----- (00424000) --------------------------------------------------------
char __thiscall sub_424000(int this, int a2)
{
  int v3; // [sp+4h] [bp-38h]@1
  __int16 v4; // [sp+Ch] [bp-30h]@1
  signed int v5; // [sp+38h] [bp-4h]@1
  __int16 v6; // [sp+Eh] [bp-2Eh]@1
  int v7; // [sp+14h] [bp-28h]@1
  char v8; // [sp+Bh] [bp-31h]@1

  v3 = this;
  sub_42C080((int)&v4);
  v5 = 0;
  v4 = 2;
  v6 = 3;
  v7 = a2;
  v8 = sub_422C50(v3, (int)&v4) == 1;
  v5 = -1;
  naticq_event();
  return v8;
}

//----- (00424090) --------------------------------------------------------
char __thiscall sub_424090(int this, int a2)
{
  char result; // al@2
  int v3; // [sp+4h] [bp-38h]@1
  __int16 v4; // [sp+Ch] [bp-30h]@1
  signed int v5; // [sp+38h] [bp-4h]@1
  __int16 v6; // [sp+Eh] [bp-2Eh]@1
  int v7; // [sp+14h] [bp-28h]@1

  v3 = this;
  sub_42C080((int)&v4);
  v5 = 0;
  v4 = 1;
  v6 = 15;
  v7 = a2;
  if ( sub_422C50(v3, (int)&v4) == 1 )
  {
    v5 = -1;
    naticq_event();
    result = 1;
  }
  else
  {
    v5 = -1;
    naticq_event();
    result = 0;
  }
  return result;
}

//----- (00424130) --------------------------------------------------------
char __thiscall sub_424130(int this, int a2)
{
  char result; // al@2
  int v3; // eax@5
  int v4; // eax@14
  int v5; // eax@14
  int v6; // [sp+4h] [bp-4Ch]@1
  __int16 v7; // [sp+1Ch] [bp-34h]@1
  signed int v8; // [sp+4Ch] [bp-4h]@1
  __int16 v9; // [sp+1Eh] [bp-32h]@1
  int v10; // [sp+24h] [bp-2Ch]@1
  int v11; // [sp+40h] [bp-10h]@3
  char v12; // [sp+28h] [bp-28h]@3
  u_short v13; // [sp+18h] [bp-38h]@5
  u_short v14; // [sp+14h] [bp-3Ch]@14
  u_short v15; // [sp+10h] [bp-40h]@14

  v6 = this;
  sub_42C080((int)&v7);
  v8 = 0;
  v7 = 1;
  v9 = 7;
  v10 = a2;
  if ( sub_422C50(v6, (int)&v7) == 1 )
  {
    v11 = 0;
    if ( sub_4019B0((int)&v12) >= (unsigned int)(v11 + 2) )
    {
      v3 = sub_4019D0((int)&v12, v11);
      memcpy(&v13, (const void *)v3, 2u);
      v13 = ntohs(v13);
      v11 += 2;
      if ( sub_4019B0((int)&v12) >= v11 + 35 * (unsigned int)v13 )
      {
        v11 += 35 * v13;
        sub_408CF0(v6 + 636);
        while ( 1 )
        {
          if ( sub_4019B0((int)&v12) < (unsigned int)v11 )
          {
            v8 = -1;
            naticq_event();
            return 0;
          }
          if ( sub_4019B0((int)&v12) == v11 )
          {
            v8 = -1;
            naticq_event();
            return 1;
          }
          if ( sub_4019B0((int)&v12) < (unsigned int)(v11 + 4) )
          {
            v8 = -1;
            naticq_event();
            return 0;
          }
          v4 = sub_4019D0((int)&v12, v11);
          memcpy(&v14, (const void *)v4, 2u);
          v14 = ntohs(v14);
          v11 += 2;
          v5 = sub_4019D0((int)&v12, v11);
          memcpy(&v15, (const void *)v5, 2u);
          v15 = ntohs(v15);
          v11 += 2;
          if ( sub_4019B0((int)&v12) < v11 + 4 * (unsigned int)v15 )
            break;
          v11 += 4 * v15;
          sub_408C70(v6 + 636, (int)&v14);
        }
        v8 = -1;
        naticq_event();
        result = 0;
      }
      else
      {
        v8 = -1;
        naticq_event();
        result = 0;
      }
    }
    else
    {
      v8 = -1;
      naticq_event();
      result = 0;
    }
  }
  else
  {
    v8 = -1;
    naticq_event();
    result = 0;
  }
  return result;
}

//----- (004243C0) --------------------------------------------------------
char __fastcall sub_4243C0(int a1)
{
  char result; // al@2
  int v2; // eax@10
  int v3; // eax@12
  int v4; // eax@12
  int v5; // [sp+4h] [bp-4Ch]@1
  __int16 v6; // [sp+1Ch] [bp-34h]@1
  signed int v7; // [sp+4Ch] [bp-4h]@1
  __int16 v8; // [sp+1Eh] [bp-32h]@1
  int v9; // [sp+24h] [bp-2Ch]@1
  int v10; // [sp+40h] [bp-10h]@3
  char v11; // [sp+28h] [bp-28h]@4
  char v12; // [sp+12h] [bp-3Eh]@5
  char v13; // [sp+11h] [bp-3Fh]@9
  u_short v14; // [sp+14h] [bp-3Ch]@10
  char v15; // [sp+10h] [bp-40h]@11
  u_short v16; // [sp+18h] [bp-38h]@12
  char v17; // [sp+Ch] [bp-44h]@12

  v5 = a1;
  sub_42C080((int)&v6);
  v7 = 0;
  v6 = 1;
  v8 = 24;
  v9 = 0;
  if ( sub_422C50(v5, (int)&v6) == 1 )
  {
    v10 = 0;
    sub_408B30(v5 + 612);
    while ( 1 )
    {
      if ( sub_4019B0((int)&v11) < (unsigned int)v10 )
      {
        v12 = 0;
        v7 = -1;
        naticq_event();
        return v12;
      }
      if ( sub_4019B0((int)&v11) == v10 )
      {
        v7 = -1;
        naticq_event();
        return 1;
      }
      if ( sub_4019B0((int)&v11) < (unsigned int)(v10 + 2) )
      {
        v13 = 0;
        v7 = -1;
        naticq_event();
        return v13;
      }
      v2 = sub_4019D0((int)&v11, v10);
      memcpy(&v14, (const void *)v2, 2u);
      v14 = ntohs(v14);
      v10 += 2;
      if ( sub_4019B0((int)&v11) < (unsigned int)(v10 + 2) )
        break;
      v3 = sub_4019D0((int)&v11, v10);
      memcpy(&v16, (const void *)v3, 2u);
      v16 = ntohs(v16);
      v4 = sub_409610((int)&v17, (int)&v14, (int)&v16);
      sub_408AB0(v5 + 612, (void **)v4);
      v10 += 2;
    }
    v15 = 0;
    v7 = -1;
    naticq_event();
    result = v15;
  }
  else
  {
    v7 = -1;
    naticq_event();
    result = 0;
  }
  return result;
}

//----- (004245A0) --------------------------------------------------------
char __fastcall sub_4245A0(int a1)
{
  char result; // al@2
  int v2; // eax@10
  int v3; // eax@10
  int v4; // [sp+4h] [bp-48h]@1
  __int16 v5; // [sp+18h] [bp-34h]@1
  signed int v6; // [sp+48h] [bp-4h]@1
  __int16 v7; // [sp+1Ah] [bp-32h]@1
  int v8; // [sp+20h] [bp-2Ch]@1
  int v9; // [sp+3Ch] [bp-10h]@3
  char v10; // [sp+24h] [bp-28h]@4
  char v11; // [sp+12h] [bp-3Ah]@5
  char v12; // [sp+11h] [bp-3Bh]@9
  u_short v13; // [sp+14h] [bp-38h]@10
  __int16 v14; // [sp+Ah] [bp-42h]@10
  char v15; // [sp+Ch] [bp-40h]@10

  v4 = a1;
  sub_42C080((int)&v5);
  v6 = 0;
  v5 = 1;
  v7 = 3;
  v8 = 0;
  if ( sub_422C50(v4, (int)&v5) == 1 )
  {
    v9 = 0;
    sub_408B30(v4 + 612);
    while ( 1 )
    {
      if ( sub_4019B0((int)&v10) < (unsigned int)v9 )
      {
        v11 = 0;
        v6 = -1;
        naticq_event();
        return v11;
      }
      if ( sub_4019B0((int)&v10) == v9 )
      {
        v6 = -1;
        naticq_event();
        return 1;
      }
      if ( sub_4019B0((int)&v10) < (unsigned int)(v9 + 2) )
        break;
      v2 = sub_4019D0((int)&v10, v9);
      memcpy(&v13, (const void *)v2, 2u);
      v13 = ntohs(v13);
      v14 = 1;
      v3 = sub_409610((int)&v15, (int)&v13, (int)&v14);
      sub_408AB0(v4 + 612, (void **)v3);
      v9 += 2;
    }
    v12 = 0;
    v6 = -1;
    naticq_event();
    result = v12;
  }
  else
  {
    v6 = -1;
    naticq_event();
    result = 0;
  }
  return result;
}

//----- (00424730) --------------------------------------------------------
char __thiscall sub_424730(int this, int a2)
{
  char result; // al@2
  int v3; // [sp+0h] [bp-4h]@1

  v3 = this;
  if ( sub_423AC0(this, a2, 0) )
  {
    if ( sub_424090(v3, 0) )
    {
      *(_DWORD *)(v3 + 784) = a2;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00424780) --------------------------------------------------------
int __thiscall sub_424780(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  int v9; // eax@1
  int  s; // [sp+240h] [bp+0h]@1
  unsigned int v11; // [sp+230h] [bp-10h]@1
  int v12; // [sp+10h] [bp-230h]@1
  signed int v13; // [sp+23Ch] [bp-4h]@1
  char v14; // [sp+1CCh] [bp-74h]@1
  __int16 v15; // [sp+1D8h] [bp-68h]@1
  char v16; // [sp+1DCh] [bp-64h]@1
  char v17; // [sp+1D0h] [bp-70h]@1
  __int16 v18; // [sp+4Ch] [bp-1F4h]@1
  int v19; // [sp+50h] [bp-1F0h]@1
  int v20; // [sp+54h] [bp-1ECh]@1
  int v21; // [sp+58h] [bp-1E8h]@1
  char v22; // [sp+190h] [bp-B0h]@1
  char v23; // [sp+191h] [bp-AFh]@1
  char v24; // [sp+192h] [bp-AEh]@1
  char v25; // [sp+193h] [bp-ADh]@1
  char v26; // [sp+194h] [bp-ACh]@1
  char v27; // [sp+195h] [bp-ABh]@1
  char v28; // [sp+196h] [bp-AAh]@1
  char v29; // [sp+197h] [bp-A9h]@1
  char v30; // [sp+198h] [bp-A8h]@1
  char v31; // [sp+199h] [bp-A7h]@1
  char v32; // [sp+19Ah] [bp-A6h]@1
  char v33; // [sp+19Bh] [bp-A5h]@1
  char v34; // [sp+19Ch] [bp-A4h]@1
  char v35; // [sp+19Dh] [bp-A3h]@1
  char v36; // [sp+19Eh] [bp-A2h]@1
  char v37; // [sp+19Fh] [bp-A1h]@1
  __int16 v38; // [sp+5Ch] [bp-1E4h]@1
  char v39; // [sp+66h] [bp-1DAh]@1
  int v40; // [sp+78h] [bp-1C8h]@1
  __int16 v41; // [sp+7Ch] [bp-1C4h]@1
  char v42; // [sp+5Eh] [bp-1E2h]@1
  char v43; // [sp+214h] [bp-2Ch]@1
  char v44; // [sp+1B0h] [bp-90h]@1
  char v45; // [sp+1A0h] [bp-A0h]@1
  char v46; // [sp+1A1h] [bp-9Fh]@1
  char v47; // [sp+1A2h] [bp-9Eh]@1
  char v48; // [sp+1A3h] [bp-9Dh]@1
  char v49; // [sp+1A4h] [bp-9Ch]@1
  char v50; // [sp+1A5h] [bp-9Bh]@1
  char v51; // [sp+1A6h] [bp-9Ah]@1
  char v52; // [sp+1A7h] [bp-99h]@1
  char v53; // [sp+1A8h] [bp-98h]@1
  char v54; // [sp+1A9h] [bp-97h]@1
  char v55; // [sp+1AAh] [bp-96h]@1
  char v56; // [sp+1ABh] [bp-95h]@1
  char v57; // [sp+1ACh] [bp-94h]@1
  char v58; // [sp+1ADh] [bp-93h]@1
  char v59; // [sp+1AEh] [bp-92h]@1
  char v60; // [sp+1AFh] [bp-91h]@1
  __int16 v61; // [sp+80h] [bp-1C0h]@1
  __int16 v62; // [sp+82h] [bp-1BEh]@1
  char v63; // [sp+84h] [bp-1BCh]@1
  char v64; // [sp+85h] [bp-1BBh]@1
  __int16 v65; // [sp+86h] [bp-1BAh]@1
  __int16 v66; // [sp+88h] [bp-1B8h]@1
  char v67; // [sp+8Ch] [bp-1B4h]@1
  char v68; // [sp+CCh] [bp-174h]@1
  __int16 v69; // [sp+DCh] [bp-164h]@1
  char v70; // [sp+E0h] [bp-160h]@1
  char v71; // [sp+30h] [bp-210h]@1
  char v72; // [sp+14h] [bp-22Ch]@1
  char v73; // [sp+FCh] [bp-144h]@1
  char v74; // [sp+1F8h] [bp-48h]@1
  char v75; // [sp+178h] [bp-C8h]@1

  v11 = (unsigned int)& s ^ dword_43901C;
  v12 = this;
  v13 = 0;
  sub_42DCF0((int)&v14);
  LOBYTE(v13) = 1;
  v15 = 2;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v16);
  memset(&v17, 171, 8u);
  sub_42B4B0((int)&v18);
  LOBYTE(v13) = 2;
  v18 = 80;
  v19 = *(_DWORD *)(v12 + 784) | 0x1000000;
  v20 = 0;
  v21 = 0;
  v22 = 9;
  v23 = 70;
  v24 = 19;
  v25 = 73;
  v26 = 76;
  v27 = 127;
  v28 = 17;
  v29 = -47;
  v30 = -126;
  v31 = 34;
  v32 = 68;
  v33 = 69;
  v34 = 83;
  v35 = 84;
  v36 = 0;
  v37 = 0;
  v38 = 0;
  memcpy(&v39, &v22, 0x10u);
  v40 = 0;
  v41 = 0;
  memcpy(&v42, &v17, 8u);
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v43);
  LOBYTE(v13) = 3;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v44);
  LOBYTE(v13) = 4;
  v45 = 59;
  v46 = 96;
  v47 = -77;
  v48 = -17;
  v49 = -40;
  v50 = 42;
  v51 = 108;
  v52 = 69;
  v53 = -92;
  v54 = -32;
  v55 = -100;
  v56 = 90;
  v57 = 94;
  v58 = 103;
  v59 = -24;
  v60 = 101;
  v61 = 9;
  v62 = 0;
  v63 = 26;
  v64 = 0;
  v65 = 0;
  v66 = 0;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v67, &unk_432A2F);
  memcpy(&v68, &v45, 0x10u);
  v69 = 8;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
    &v70,
    "Script Plug-in: Remote Notification Arrive");
  v9 = std__operator__char_std__char_traits_char__std__allocator_char__(&v71, &v43, v12 + 416);
  LOBYTE(v13) = 5;
  std__operator__char_std__char_traits_char__std__allocator_char__(&v72, v9, &v44);
  LOBYTE(v13) = 6;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v73);
  LOBYTE(v13) = 5;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v72);
  LOBYTE(v13) = 4;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v71);
  sub_42EA90((int)&v18, (int)&v74);
  sub_401700((int)&v75);
  LOBYTE(v13) = 7;
  sub_42DE70((int)&v14, (int)&v75, 0);
  sub_41E760(v12, 4, 6, 0, (int)&v75);
  LOBYTE(v13) = 4;
  sub_4017F0((int)&v75);
  LOBYTE(v13) = 3;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v44);
  LOBYTE(v13) = 2;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v43);
  LOBYTE(v13) = 1;
  sub_42B490((int)&v18);
  LOBYTE(v13) = 0;
  sub_42DCD0((int)&v14);
  v13 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (00424B60) --------------------------------------------------------
char __thiscall sub_424B60(int this, void *a2, int a3)
{
  char result; // al@2
  int v4; // eax@5
  int v5; // [sp+4h] [bp-3Ch]@1
  __int16 v6; // [sp+10h] [bp-30h]@1
  signed int v7; // [sp+3Ch] [bp-4h]@1
  __int16 v8; // [sp+12h] [bp-2Eh]@1
  int v9; // [sp+18h] [bp-28h]@1
  unsigned int v10; // [sp+Ch] [bp-34h]@3
  char v11; // [sp+1Ch] [bp-24h]@4

  v5 = this;
  sub_42C080((int)&v6);
  v7 = 0;
  v6 = 19;
  v8 = 14;
  v9 = a3;
  if ( sub_422C50(v5, (int)&v6) == 1 )
  {
    v10 = 0;
    while ( v10 < (unsigned int)sub_4019B0((int)&v11) >> 1 )
    {
      v4 = sub_4019D0((int)&v11, 2 * v10);
      memcpy(a2, (const void *)v4, 2u);
      *(_WORD *)a2 = ntohs(*(_WORD *)a2);
      if ( *(_WORD *)a2 )
        break;
      ++v10;
    }
    v7 = -1;
    naticq_event();
    result = 1;
  }
  else
  {
    v7 = -1;
    naticq_event();
    result = 0;
  }
  return result;
}

//----- (00424C60) --------------------------------------------------------
char __thiscall sub_424C60(int this, int a2, int a3)
{
  int v4; // eax@1
  int v5; // eax@10
  int v6; // [sp+4h] [bp-40h]@1
  __int16 v7; // [sp+10h] [bp-34h]@1
  signed int v8; // [sp+40h] [bp-4h]@1
  __int16 v9; // [sp+12h] [bp-32h]@1
  int v10; // [sp+18h] [bp-2Ch]@1
  __int16 v11; // [sp+14h] [bp-30h]@1
  int v12; // [sp+34h] [bp-10h]@1
  char v13; // [sp+1Ch] [bp-28h]@5

  v6 = this;
  sub_42C080((int)&v7);
  v8 = 0;
  v7 = 21;
  v9 = 3;
  v10 = a3;
  v11 = 1;
  v4 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(v6 + 416);
  v12 = atoi((const char *)v4);
  while ( v11 & 1 )
  {
    if ( sub_422C50(v6, (int)&v7) != 1 )
    {
      v8 = -1;
      naticq_event();
      return 0;
    }
    if ( (unsigned int)sub_4019B0((int)&v13) < 0x11 )
    {
      v8 = -1;
      naticq_event();
      return 0;
    }
    if ( *(_BYTE *)sub_4019D0((int)&v13, 0) || *(_BYTE *)sub_4019D0((int)&v13, 1u) != 1 )
    {
      v8 = -1;
      naticq_event();
      return 0;
    }
    v5 = sub_4019D0((int)&v13, 6u);
    if ( memcmp((const void *)v5, &v12, 4u) )
    {
      v8 = -1;
      naticq_event();
      return 0;
    }
    if ( *(_BYTE *)sub_4019D0((int)&v13, 0xAu) != 218 || *(_BYTE *)sub_4019D0((int)&v13, 0xBu) != 7 )
    {
      v8 = -1;
      naticq_event();
      return 0;
    }
    if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) != 200 || *(_BYTE *)sub_4019D0((int)&v13, 0xFu) )
    {
      if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) != 220 || *(_BYTE *)sub_4019D0((int)&v13, 0xFu) )
      {
        if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) != 235 || *(_BYTE *)sub_4019D0((int)&v13, 0xFu) )
        {
          if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) != 14 || *(_BYTE *)sub_4019D0((int)&v13, 0xFu) != 1 )
          {
            if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) != 210 || *(_BYTE *)sub_4019D0((int)&v13, 0xFu) )
            {
              if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) != 230 || *(_BYTE *)sub_4019D0((int)&v13, 0xFu) )
              {
                if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) != 240 || *(_BYTE *)sub_4019D0((int)&v13, 0xFu) )
                {
                  if ( *(_BYTE *)sub_4019D0((int)&v13, 0xEu) == 250 )
                  {
                    if ( !*(_BYTE *)sub_4019D0((int)&v13, 0xFu) )
                      sub_41B210(v6, (int)&v13, a2);
                  }
                }
                else
                {
                  sub_41B7A0(v6, (int)&v13, a2);
                }
              }
              else
              {
                sub_41BB70(v6, (int)&v13, a2);
              }
            }
            else
            {
              sub_41BC50(v6, (int)&v13, a2);
            }
          }
          else
          {
            sub_41C350(v6, (int)&v13, a2);
          }
        }
        else
        {
          sub_41DB90(v6, (int)&v13, a2);
        }
      }
      else
      {
        sub_41C4B0(v6, (int)&v13, a2);
      }
    }
    else
    {
      sub_41C9E0(v6, (int)&v13, a2);
    }
  }
  v8 = -1;
  naticq_event();
  return 1;
}

//----- (00424FE0) --------------------------------------------------------
char __thiscall sub_424FE0(int this, int a2)
{
  return sub_4228D0(this, a2);
}

//----- (00425000) --------------------------------------------------------
char __fastcall sub_425000(int a1)
{
  char result; // al@5
  int v3; // [sp+4h] [bp-58h]@1
  unsigned __int8 v4; // [sp+10h] [bp-4Ch]@1
  signed int v5; // [sp+58h] [bp-4h]@1
  signed int v6; // [sp+30h] [bp-2Ch]@1
  signed int v7; // [sp+2Ch] [bp-30h]@4
  char v8; // [sp+34h] [bp-28h]@11
  char v9; // [sp+14h] [bp-48h]@11

  v3 = a1;
  sub_42C1E0((int)&v4);
  v5 = 0;
  v6 = 300;
  do
  {
    (*(int (__thiscall **)(int))(*(_DWORD *)v3 + 4))(v3);
    if ( sub_42D310((int)&v4, *(_DWORD *)(v3 + 600)) )
      break;
    if ( v7 != -2 )
    {
      v5 = -1;
      sub_42BD10((int)&v4);
      return 0;
    }
  }
  while ( v6-- != 1 );
  if ( v6 )
  {
    if ( v4 == 1 )
    {
      sub_42DDD0((int)&v8);
      LOBYTE(v5) = 1;
      if ( sub_42EF10((int)&v8, (int)&v9, 0) )
      {
        LOBYTE(v5) = 0;
        sub_42DDB0((int)&v8);
        v5 = -1;
        sub_42BD10((int)&v4);
        result = 1;
      }
      else
      {
        LOBYTE(v5) = 0;
        sub_42DDB0((int)&v8);
        v5 = -1;
        sub_42BD10((int)&v4);
        result = 0;
      }
    }
    else
    {
      v5 = -1;
      sub_42BD10((int)&v4);
      result = 0;
    }
  }
  else
  {
    v5 = -1;
    sub_42BD10((int)&v4);
    result = 0;
  }
  return result;
}

//----- (00425150) --------------------------------------------------------
char __thiscall sub_425150(int this, int a2)
{
  int v3; // ST08_4@11
  int v4; // eax@11
  int v5; // eax@11
  unsigned int v6; // edx@11
  unsigned int v7; // eax@16
  int v8; // eax@19
  unsigned int v9; // ST08_4@20
  int v10; // eax@20
  unsigned int v11; // ST04_4@21
  int v12; // eax@21
  int v13; // eax@21
  unsigned int v14; // ST08_4@22
  int v15; // eax@22
  int v16; // eax@30
  unsigned int v17; // ST08_4@31
  int v18; // eax@31
  unsigned int v19; // ST08_4@32
  int v20; // eax@32
  int v21; // eax@32
  unsigned int v22; // ST04_4@33
  int v23; // eax@33
  int v24; // eax@33
  int v25; // eax@37
  unsigned int v26; // ST08_4@38
  int v27; // eax@38
  unsigned int v28; // ST04_4@39
  int v29; // eax@39
  int v30; // eax@39
  int v31; // eax@43
  unsigned int v32; // ST08_4@44
  int v33; // eax@44
  unsigned int v34; // ST04_4@45
  int v35; // eax@45
  int v36; // eax@45
  int v37; // eax@49
  unsigned int v38; // ST08_4@50
  int v39; // eax@50
  unsigned int v40; // ST04_4@51
  int v41; // eax@51
  int v42; // eax@51
  int v43; // eax@54
  int v44; // eax@58
  signed int v45; // eax@58
  int v46; // ST08_4@59
  int v47; // eax@59
  int v48; // eax@61
  int v49; // eax@63
  int  s; // [sp+6F8h] [bp+0h]@1
  unsigned int v51; // [sp+69Ch] [bp-5Ch]@1
  int v52; // [sp+4h] [bp-6F4h]@1
  __int16 v53; // [sp+6C8h] [bp-30h]@1
  signed int v54; // [sp+6F4h] [bp-4h]@1
  __int16 v55; // [sp+6CAh] [bp-2Eh]@1
  __int16 v56; // [sp+6CCh] [bp-2Ch]@1
  int v57; // [sp+6D0h] [bp-28h]@1
  char v58; // [sp+6A8h] [bp-50h]@1
  char v59; // [sp+6D4h] [bp-24h]@5
  unsigned int v60; // [sp+6A4h] [bp-54h]@8
  char v61; // [sp+28h] [bp-6D0h]@11
  char v62; // [sp+20h] [bp-6D8h]@11
  int v63; // [sp+30h] [bp-6C8h]@11
  unsigned int v64; // [sp+34h] [bp-6C4h]@11
  char v65; // [sp+18h] [bp-6E0h]@11
  unsigned int v66; // [sp+6A0h] [bp-58h]@14
  char v67; // [sp+6B0h] [bp-48h]@15
  unsigned int v68; // [sp+0h] [bp-6F8h]@16
  char v69; // [sp+51Ch] [bp-1DCh]@18
  __int16 v70; // [sp+554h] [bp-1A4h]@18
  __int16 v71; // [sp+574h] [bp-184h]@18
  char v72; // [sp+538h] [bp-1C0h]@18
  char v73; // [sp+558h] [bp-1A0h]@18
  char v74; // [sp+576h] [bp-182h]@18
  unsigned int v75; // [sp+518h] [bp-1E0h]@18
  int v76; // [sp+578h] [bp-180h]@25
  int v77; // [sp+57Ch] [bp-17Ch]@25
  int v78; // [sp+580h] [bp-178h]@25
  __int16 v79; // [sp+4F8h] [bp-200h]@28
  char v80; // [sp+4FCh] [bp-1FCh]@28
  unsigned int v81; // [sp+4F4h] [bp-204h]@29
  char v82; // [sp+374h] [bp-384h]@36
  __int16 v83; // [sp+3ACh] [bp-34Ch]@36
  __int16 v84; // [sp+3CCh] [bp-32Ch]@36
  unsigned int v85; // [sp+370h] [bp-388h]@36
  char v86; // [sp+390h] [bp-368h]@39
  char v87; // [sp+1ECh] [bp-50Ch]@42
  __int16 v88; // [sp+224h] [bp-4D4h]@42
  __int16 v89; // [sp+244h] [bp-4B4h]@42
  unsigned int v90; // [sp+1E8h] [bp-510h]@42
  char v91; // [sp+208h] [bp-4F0h]@45
  char v92; // [sp+64h] [bp-694h]@48
  __int16 v93; // [sp+9Ch] [bp-65Ch]@48
  __int16 v94; // [sp+BCh] [bp-63Ch]@48
  unsigned int v95; // [sp+60h] [bp-698h]@48
  char v96; // [sp+80h] [bp-678h]@51
  char v97; // [sp+Ch] [bp-6ECh]@54
  unsigned int v98; // [sp+5Ch] [bp-69Ch]@56
  unsigned int v99; // [sp+58h] [bp-6A0h]@58
  char v100; // [sp+40h] [bp-6B8h]@61
  unsigned int v101; // [sp+3Ch] [bp-6BCh]@61

  v51 = (unsigned int)& s ^ dword_43901C;
  v52 = this;
  sub_42C080((int)&v53);
  v54 = 0;
  v53 = 19;
  v55 = 6;
  v56 = 1;
  v57 = a2;
  sub_42D970((int)&v58);
  LOBYTE(v54) = 1;
  while ( v56 & 1 )
  {
    if ( sub_422C50(v52, (int)&v53) != 1 )
    {
      LOBYTE(v54) = 0;
      sub_42D950((int)&v58);
      v54 = -1;
      naticq_event();
      return 0;
    }
    if ( !(unsigned __int8)sub_42E8E0((int)&v58, (int)&v59, 0) )
    {
      LOBYTE(v54) = 0;
      sub_42D950((int)&v58);
      v54 = -1;
      naticq_event();
      return 0;
    }
  }
  v60 = 0;
  while ( v60 < sub_4085B0(v52 + 8) )
  {
    if ( *(_BYTE *)(sub_4085D0(v52 + 8, v60) + 224) )
    {
      ++v60;
    }
    else
    {
      v3 = v60;
      v4 = sub_402FA0(v52 + 8, (int)&v61);
      v5 = sub_409470(v4, (int)&v62, v3);
      v6 = *(_DWORD *)(v5 + 4);
      v63 = *(_DWORD *)v5;
      v64 = v6;
      sub_408690(v52 + 8, (int)&v65, v63, v6);
    }
  }
  sub_408970(v52 + 32);
  sub_408700(v52 + 56);
  sub_408700(v52 + 80);
  sub_408700(v52 + 104);
  sub_408700(v52 + 128);
  sub_409300(v52 + 732);
  v66 = 0;
  while ( v66 < sub_4025E0((int)&v67) )
  {
    v7 = *(_WORD *)(sub_409360((int)&v67, v66) + 36);
    v68 = v7;
    if ( v7 > 0xE )
    {
LABEL_54:
      v43 = sub_409360((int)&v67, v66);
      sub_409130(v52 + 732, (int)&v97, v43 + 34);
    }
    else
    {
      switch ( v68 )
      {
        case 0u:
          sub_406400();
          LOBYTE(v54) = 2;
          sub_409360((int)&v67, v66);
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v69);
          v70 = *(_WORD *)(sub_409360((int)&v67, v66) + 32);
          v71 = *(_WORD *)(sub_409360((int)&v67, v66) + 34);
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v72, &unk_432465);
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v73, &unk_432466);
          v74 = 0;
          v75 = 0;
          while ( 1 )
          {
            v8 = sub_409360((int)&v67, v66);
            if ( v75 >= sub_4095F0(v8 + 40) )
              break;
            v9 = v75;
            v10 = sub_409360((int)&v67, v66);
            if ( *(_WORD *)sub_401C80(v10 + 40, v9) == 305 )
            {
              v11 = v75;
              v12 = sub_409360((int)&v67, v66);
              v13 = sub_401C80(v12 + 40, v11);
              sub_42BBE0(v13, (int)&v72);
            }
            v14 = v75;
            v15 = sub_409360((int)&v67, v66);
            if ( *(_WORD *)sub_401C80(v15 + 40, v14) == 102 )
              v74 = 1;
            ++v75;
          }
          v76 = 0;
          v77 = 0;
          v78 = 0;
          sub_408610(v52 + 8, (int)&v69);
          LOBYTE(v54) = 1;
          sub_4078E0((int)&v69);
          break;
        case 1u:
          if ( *(_WORD *)(sub_409360((int)&v67, v66) + 32) )
          {
            sub_407EF0();
            LOBYTE(v54) = 3;
            v79 = *(_WORD *)(sub_409360((int)&v67, v66) + 32);
            sub_409360((int)&v67, v66);
            std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v80);
            sub_408880(v52 + 32, (int)&v79);
            LOBYTE(v54) = 1;
            sub_407F10((int)&v79);
          }
          break;
        case 2u:
          sub_406400();
          LOBYTE(v54) = 4;
          sub_409360((int)&v67, v66);
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v82);
          v83 = *(_WORD *)(sub_409360((int)&v67, v66) + 32);
          v84 = *(_WORD *)(sub_409360((int)&v67, v66) + 34);
          v85 = 0;
          while ( 1 )
          {
            v25 = sub_409360((int)&v67, v66);
            if ( v85 >= sub_4095F0(v25 + 40) )
              break;
            v26 = v85;
            v27 = sub_409360((int)&v67, v66);
            if ( *(_WORD *)sub_401C80(v27 + 40, v26) == 305 )
            {
              v28 = v85;
              v29 = sub_409360((int)&v67, v66);
              v30 = sub_401C80(v29 + 40, v28);
              sub_42BBE0(v30, (int)&v86);
            }
            ++v85;
          }
          sub_408610(v52 + 80, (int)&v82);
          LOBYTE(v54) = 1;
          sub_4078E0((int)&v82);
          break;
        case 3u:
          sub_406400();
          LOBYTE(v54) = 5;
          sub_409360((int)&v67, v66);
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v87);
          v88 = *(_WORD *)(sub_409360((int)&v67, v66) + 32);
          v89 = *(_WORD *)(sub_409360((int)&v67, v66) + 34);
          v90 = 0;
          while ( 1 )
          {
            v31 = sub_409360((int)&v67, v66);
            if ( v90 >= sub_4095F0(v31 + 40) )
              break;
            v32 = v90;
            v33 = sub_409360((int)&v67, v66);
            if ( *(_WORD *)sub_401C80(v33 + 40, v32) == 305 )
            {
              v34 = v90;
              v35 = sub_409360((int)&v67, v66);
              v36 = sub_401C80(v35 + 40, v34);
              sub_42BBE0(v36, (int)&v91);
            }
            ++v90;
          }
          sub_408610(v52 + 104, (int)&v87);
          LOBYTE(v54) = 1;
          sub_4078E0((int)&v87);
          break;
        case 4u:
          *(_WORD *)(v52 + 790) = *(_WORD *)(sub_409360((int)&v67, v66) + 34);
          v81 = 0;
          while ( 1 )
          {
            v16 = sub_409360((int)&v67, v66);
            if ( v81 >= sub_4095F0(v16 + 40) )
              break;
            v17 = v81;
            v18 = sub_409360((int)&v67, v66);
            if ( *(_WORD *)sub_401C80(v18 + 40, v17) == 202 )
            {
              v19 = v81;
              v20 = sub_409360((int)&v67, v66);
              v21 = sub_401C80(v20 + 40, v19);
              if ( !sub_408180(v21 + 4) )
              {
                v22 = v81;
                v23 = sub_409360((int)&v67, v66);
                v24 = sub_401C80(v23 + 40, v22);
                *(_BYTE *)(v52 + 788) = *(_BYTE *)sub_4019D0(v24 + 4, 0);
              }
            }
            ++v81;
          }
          break;
        case 0xEu:
          sub_406400();
          LOBYTE(v54) = 6;
          sub_409360((int)&v67, v66);
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v92);
          v93 = *(_WORD *)(sub_409360((int)&v67, v66) + 32);
          v94 = *(_WORD *)(sub_409360((int)&v67, v66) + 34);
          v95 = 0;
          while ( 1 )
          {
            v37 = sub_409360((int)&v67, v66);
            if ( v95 >= sub_4095F0(v37 + 40) )
              break;
            v38 = v95;
            v39 = sub_409360((int)&v67, v66);
            if ( *(_WORD *)sub_401C80(v39 + 40, v38) == 305 )
            {
              v40 = v95;
              v41 = sub_409360((int)&v67, v66);
              v42 = sub_401C80(v41 + 40, v40);
              sub_42BBE0(v42, (int)&v96);
            }
            ++v95;
          }
          sub_408610(v52 + 128, (int)&v92);
          LOBYTE(v54) = 1;
          sub_4078E0((int)&v92);
          break;
        case 5u:
        case 6u:
        case 7u:
        case 8u:
        case 9u:
        case 0xAu:
        case 0xBu:
        case 0xCu:
        case 0xDu:
          goto LABEL_54;
      }
    }
    ++v66;
  }
  v98 = 0;
  while ( v98 < sub_4085B0(v52 + 8) )
  {
    v44 = sub_4085D0(v52 + 8, v98);
    v45 = sub_41AB50(v52, *(_WORD *)(v44 + 56));
    v99 = v45;
    if ( v45 >= 0 )
    {
      v46 = sub_408850(v52 + 32, v99) + 4;
      v47 = sub_4085D0(v52 + 8, v98);
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v47 + 60);
    }
    ++v98;
  }
  sub_401A60((int)&v100);
  LOBYTE(v54) = 7;
  v48 = sub_4085B0(v52 + 8);
  sub_4095C0((int)&v100, v48);
  v101 = 0;
  while ( v101 < sub_4085B0(v52 + 8) )
  {
    sub_4085D0(v52 + 8, v101);
    v49 = sub_401C80((int)&v100, v101);
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v49);
    ++v101;
  }
  sub_421C50(v52, (int)&v100);
  LOBYTE(v54) = 1;
  sub_409560((int)&v100);
  LOBYTE(v54) = 0;
  sub_42D950((int)&v58);
  v54 = -1;
  naticq_event();
  return 1;
}

//----- (00425BD0) --------------------------------------------------------
char __thiscall sub_425BD0(int this, char a2)
{
  char result; // al@3
  int v3; // eax@4
  int  s; // [sp+A0h] [bp+0h]@1
  unsigned int v5; // [sp+6Ch] [bp-34h]@1
  int v6; // [sp+8h] [bp-98h]@1
  char v7; // [sp+2Ch] [bp-74h]@4
  signed int v8; // [sp+9Ch] [bp-4h]@4
  char v9; // [sp+30h] [bp-70h]@4
  __int16 v10; // [sp+4Ch] [bp-54h]@4
  __int16 v11; // [sp+50h] [bp-50h]@4
  char v12; // [sp+10h] [bp-90h]@4
  int v13; // [sp+4h] [bp-9Ch]@4
  int v14; // [sp+0h] [bp-A0h]@4
  char v15; // [sp+54h] [bp-4Ch]@4
  unsigned __int16 v16; // [sp+4Eh] [bp-52h]@5
  __int16 v17; // [sp+8Ch] [bp-14h]@5
  char v18; // [sp+70h] [bp-30h]@7
  int v19; // [sp+88h] [bp-18h]@7
  __int16 v20; // [sp+90h] [bp-10h]@9

  v5 = (unsigned int)& s ^ dword_43901C;
  v6 = this;
  if ( (signed int)(unsigned __int8)a2 >= 1 && (signed int)(unsigned __int8)a2 <= 5 )
  {
    sub_42C3E0((int)&v7);
    v8 = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v9, &unk_432457);
    v10 = 0;
    v11 = 4;
    v3 = sub_407110((int)&v12, a2, 202);
    v13 = v3;
    v14 = v3;
    LOBYTE(v8) = 1;
    sub_401CB0((int)&v15, v3);
    LOBYTE(v8) = 0;
    sub_42BCD0((int)&v12);
    if ( *(_WORD *)(v6 + 790) )
    {
      v16 = *(_WORD *)(v6 + 790);
      v17 = 9;
    }
    else
    {
      v16 = sub_41AFB0(v6);
      v17 = 8;
    }
    sub_401700((int)&v18);
    LOBYTE(v8) = 2;
    sub_42D990((int)&v7, (int)&v18, 0);
    if ( sub_41E760(v6, 19, v17, (int)&v19, (int)&v18) == 1 )
    {
      if ( sub_424B60(v6, &v20, v19) )
      {
        if ( v20 )
        {
          LOBYTE(v8) = 0;
          sub_4017F0((int)&v18);
          v8 = -1;
          sub_42C3B0((int)&v7);
          result = 0;
        }
        else
        {
          *(_BYTE *)(v6 + 788) = a2;
          *(_WORD *)(v6 + 790) = v16;
          LOBYTE(v8) = 0;
          sub_4017F0((int)&v18);
          v8 = -1;
          sub_42C3B0((int)&v7);
          result = 1;
        }
      }
      else
      {
        LOBYTE(v8) = 0;
        sub_4017F0((int)&v18);
        v8 = -1;
        sub_42C3B0((int)&v7);
        result = 0;
      }
    }
    else
    {
      LOBYTE(v8) = 0;
      sub_4017F0((int)&v18);
      v8 = -1;
      sub_42C3B0((int)&v7);
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (00425E20) --------------------------------------------------------
#error "425FCE: positive sp value has been found (funcsize=131)"

//----- (00425FE0) --------------------------------------------------------
char __thiscall sub_425FE0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  char ST20_1_0; // ST20_1@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  __int16 ST3C_2_0; // ST3C_2@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  int ST54_4_0; // ST54_4@0
  int ST58_4_0; // ST58_4@0
  int ST5C_4_0; // ST5C_4@0
  int ST60_4_0; // ST60_4@0
  int ST64_4_0; // ST64_4@0
  int ST68_4_0; // ST68_4@0
  int ST6C_4_0; // ST6C_4@0
  int ST70_4_0; // ST70_4@0
  int ST74_4_0; // ST74_4@0
  int ST78_4_0; // ST78_4@0
  int ST7C_4_0; // ST7C_4@0
  int ST80_4_0; // ST80_4@0
  int ST84_4_0; // ST84_4@0
  int ST88_4_0; // ST88_4@0
  int ST8C_4_0; // ST8C_4@0
  int ST90_4_0; // ST90_4@0
  int ST94_4_0; // ST94_4@0
  int ST98_4_0; // ST98_4@0
  int ST9C_4_0; // ST9C_4@0
  int STA0_4_0; // STA0_4@0
  int STA4_4_0; // STA4_4@0
  int STA8_4_0; // STA8_4@0
  int STAC_4_0; // STAC_4@0
  int STB0_4_0; // STB0_4@0
  int STB4_4_0; // STB4_4@0
  int STB8_4_0; // STB8_4@0
  int STBC_4_0; // STBC_4@0
  int STC0_4_0; // STC0_4@0
  int STC4_4_0; // STC4_4@0
  int STC8_4_0; // STC8_4@0
  int STCC_4_0; // STCC_4@0
  int STD0_4_0; // STD0_4@0
  int STD4_4_0; // STD4_4@0
  int STD8_4_0; // STD8_4@0
  int STDC_4_0; // STDC_4@0
  int STE0_4_0; // STE0_4@0
  int STE4_4_0; // STE4_4@0
  int STE8_4_0; // STE8_4@0
  int STEC_4_0; // STEC_4@0
  int STF0_4_0; // STF0_4@0
  int STF4_4_0; // STF4_4@0
  int STF8_4_0; // STF8_4@0
  char ST16C_1_0; // ST16C_1@0
  int ST170_4_0; // ST170_4@0
  int ST174_4_0; // ST174_4@0
  int ST178_4_0; // ST178_4@0
  int ST17C_4_0; // ST17C_4@0
  int ST180_4_0; // ST180_4@0
  char result; // al@4
  char v92; // ST04_1@9
  int v93; // ST08_4@9
  int v94; // ST0C_4@9
  int v95; // ST10_4@9
  int v96; // ST14_4@9
  int v97; // ST18_4@9
  int v98; // ST1C_4@9
  char v99; // ST20_1@9
  int v100; // ST24_4@9
  int v101; // ST28_4@9
  int v102; // ST2C_4@9
  int v103; // ST30_4@9
  int v104; // ST34_4@9
  int v105; // ST38_4@9
  __int16 v106; // ST3C_2@9
  int v107; // ST40_4@9
  int v108; // ST44_4@9
  int v109; // ST48_4@9
  int v110; // ST4C_4@9
  int v111; // ST50_4@9
  int v112; // ST54_4@9
  int v113; // ST58_4@9
  int v114; // ST5C_4@9
  int v115; // ST60_4@9
  int v116; // ST64_4@9
  int v117; // ST68_4@9
  int v118; // ST6C_4@9
  int v119; // ST70_4@9
  int v120; // ST74_4@9
  int v121; // ST78_4@9
  int v122; // ST7C_4@9
  int v123; // ST80_4@9
  int v124; // ST84_4@9
  int v125; // ST88_4@9
  int v126; // ST8C_4@9
  int v127; // ST90_4@9
  int v128; // ST94_4@9
  int v129; // ST98_4@9
  int v130; // ST9C_4@9
  int v131; // STA0_4@9
  int v132; // STA4_4@9
  int v133; // STA8_4@9
  int v134; // STAC_4@9
  int v135; // STB0_4@9
  int v136; // STB4_4@9
  int v137; // STB8_4@9
  int v138; // STBC_4@9
  int v139; // STC0_4@9
  int v140; // STC4_4@9
  int v141; // STC8_4@9
  int v142; // STCC_4@9
  int v143; // STD0_4@9
  int v144; // STD4_4@9
  int v145; // STD8_4@9
  int v146; // STDC_4@9
  int miif; // STE0_4@9
  int v148; // STE4_4@9
  int forbid_this_client; // STE8_4@9
  int v150; // STEC_4@9
  int v151; // STF0_4@9
  int p->pkt.type; // STF4_4@9
  int p->data; // STF8_4@9
  int p->pkt.data_len; // ST184_4@1
  signed int v155; // eax@1
  int v156; // ST184_4@5
  unsigned __int16 v157; // ax@5
  char v158; // al@9
  char v159; // al@18
  int  s; // [sp+1D4h] [bp+0h]@1
  unsigned int v161; // [sp+1C4h] [bp-10h]@1
  int v162; // [sp+18h] [bp-1BCh]@1
  signed int total_sent; // [sp+1D0h] [bp-4h]@1
  int v164; // [sp-20h] [bp-1F4h]@1
  int *v165; // [sp+30h] [bp-1A4h]@1
  int data_arrived; // [sp+14h] [bp-1C0h]@1
  signed int v167; // [sp+10h] [bp-1C4h]@1
  unsigned int v168; // [sp+3Ch] [bp-198h]@1
  char v169; // [sp+2Fh] [bp-1A5h]@4
  char activity_time; // [sp+40h] [bp-194h]@5
  char v171; // [sp+5Ch] [bp-178h]@5
  __int16 v172; // [sp+78h] [bp-15Ch]@5
  char v173; // [sp+7Ch] [bp-158h]@5
  unsigned __int16 v174; // [sp+98h] [bp-13Ch]@5
  char v175; // [sp+2Eh] [bp-1A6h]@8
  char v176; // [sp+9Ah] [bp-13Ah]@9
  char *v177; // [sp+28h] [bp-1ACh]@9
  int v178; // [sp+Ch] [bp-1C8h]@9
  char v179; // [sp+Bh] [bp-1C9h]@9
  char v180; // [sp+27h] [bp-1ADh]@12
  unsigned __int16 v181; // [sp+34h] [bp-1A0h]@13
  int v182; // [sp+38h] [bp-19Ch]@13
  char v183; // [sp+26h] [bp-1AEh]@16
  char *v184; // [sp+20h] [bp-1B4h]@18
  int v185; // [sp+4h] [bp-1D0h]@18
  char v186; // [sp+3h] [bp-1D1h]@18
  char v187; // [sp+1Fh] [bp-1B5h]@21
  char v188; // [sp+1Eh] [bp-1B6h]@25
  char v189; // [sp+1Dh] [bp-1B7h]@30

  v161 = (unsigned int)& s ^ dword_43901C;
  p->pkt.data_len = (unsigned int)& s ^ dword_43901C;
  v162 = this;
  total_sent = 2;
  v165 = &v164;
  data_arrived = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
  v155 = sub_41ABB0(v162, ST16C_1_0, ST170_4_0, ST174_4_0, ST178_4_0, ST17C_4_0, ST180_4_0, p->pkt.data_len);
  v167 = v155;
  v168 = v155;
  if ( v155 < 0 )
  {
    if ( a23 )
      *(_WORD *)a23 = 2;
    v169 = 0;
    LOBYTE(total_sent) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(total_sent) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    total_sent = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return v169;
  }
  sub_406400();
  LOBYTE(total_sent) = 3;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&activity_time);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v171);
  v172 = *(_WORD *)sub_408850(v162 + 32, v168);
  v156 = sub_408850(v162 + 32, v168) + 4;
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v173);
  v157 = sub_41AFB0(v162);
  v174 = v157;
  if ( !v157 )
  {
    if ( a23 )
      *(_WORD *)a23 = 12;
    v175 = 0;
    LOBYTE(total_sent) = 2;
    sub_4078E0((int)&activity_time);
    LOBYTE(total_sent) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(total_sent) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    total_sent = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return v175;
  }
  v176 = 0;
  v177 = &ST04_1_0;
  v178 = sub_4079E0((int)&ST04_1_0, (int)&activity_time);
  v158 = sub_422490(
           v162,
           ST04_1_0,
           ST08_4_0,
           ST0C_4_0,
           ST10_4_0,
           ST14_4_0,
           ST18_4_0,
           ST1C_4_0,
           ST20_1_0,
           ST24_4_0,
           ST28_4_0,
           ST2C_4_0,
           ST30_4_0,
           ST34_4_0,
           ST38_4_0,
           ST3C_2_0,
           ST40_4_0,
           ST44_4_0,
           ST48_4_0,
           ST4C_4_0,
           ST50_4_0,
           ST54_4_0,
           ST58_4_0,
           ST5C_4_0,
           ST60_4_0,
           ST64_4_0,
           ST68_4_0,
           ST6C_4_0,
           ST70_4_0,
           ST74_4_0,
           ST78_4_0,
           ST7C_4_0,
           ST80_4_0,
           ST84_4_0,
           ST88_4_0,
           ST8C_4_0,
           ST90_4_0,
           ST94_4_0,
           ST98_4_0,
           ST9C_4_0,
           STA0_4_0,
           STA4_4_0,
           STA8_4_0,
           STAC_4_0,
           STB0_4_0,
           STB4_4_0,
           STB8_4_0,
           STBC_4_0,
           STC0_4_0,
           STC4_4_0,
           STC8_4_0,
           STCC_4_0,
           STD0_4_0,
           STD4_4_0,
           STD8_4_0,
           STDC_4_0,
           STE0_4_0,
           STE4_4_0,
           STE8_4_0,
           STEC_4_0,
           STF0_4_0,
           STF4_4_0,
           STF8_4_0);
  v179 = v158;
  if ( !(unsigned __int8)v158 )
  {
    if ( a23 )
      *(_WORD *)a23 = 4;
    v180 = 0;
    LOBYTE(total_sent) = 2;
    sub_4078E0((int)&activity_time);
    LOBYTE(total_sent) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(total_sent) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    total_sent = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return v180;
  }
  if ( !(unsigned __int8)sub_424B60(v162, &v181, v182) )
  {
    if ( a23 )
      *(_WORD *)a23 = 4;
    v183 = 0;
    LOBYTE(total_sent) = 2;
    sub_4078E0((int)&activity_time);
    LOBYTE(total_sent) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(total_sent) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    total_sent = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return v183;
  }
  if ( v181 != 14 )
    goto LABEL_33;
  v176 = 1;
  v184 = &ST04_1_0;
  v185 = sub_4079E0((int)&ST04_1_0, (int)&activity_time);
  v159 = sub_422490(
           v162,
           v92,
           v93,
           v94,
           v95,
           v96,
           v97,
           v98,
           v99,
           v100,
           v101,
           v102,
           v103,
           v104,
           v105,
           v106,
           v107,
           v108,
           v109,
           v110,
           v111,
           v112,
           v113,
           v114,
           v115,
           v116,
           v117,
           v118,
           v119,
           v120,
           v121,
           v122,
           v123,
           v124,
           v125,
           v126,
           v127,
           v128,
           v129,
           v130,
           v131,
           v132,
           v133,
           v134,
           v135,
           v136,
           v137,
           v138,
           v139,
           v140,
           v141,
           v142,
           v143,
           v144,
           v145,
           v146,
           miif,
           v148,
           forbid_this_client,
           v150,
           v151,
           p->pkt.type,
           p->data);
  v186 = v159;
  if ( !(unsigned __int8)v159 )
  {
    if ( a23 )
      *(_WORD *)a23 = 4;
    v187 = 0;
    LOBYTE(total_sent) = 2;
    sub_4078E0((int)&activity_time);
    LOBYTE(total_sent) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(total_sent) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    total_sent = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return v187;
  }
  if ( sub_424B60(v162, &v181, v182) )
  {
LABEL_33:
    if ( a23 )
      *(_WORD *)a23 = v181;
    if ( !v181 )
      sub_408610(v162 + 8, (int)&activity_time);
    v189 = 1;
    LOBYTE(total_sent) = 2;
    sub_4078E0((int)&activity_time);
    LOBYTE(total_sent) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(total_sent) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    total_sent = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    result = v189;
  }
  else
  {
    if ( a23 )
      *(_WORD *)a23 = 4;
    v188 = 0;
    LOBYTE(total_sent) = 2;
    sub_4078E0((int)&activity_time);
    LOBYTE(total_sent) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(total_sent) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    total_sent = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    result = v188;
  }
  return result;
}

//----- (00426480) --------------------------------------------------------
char __thiscall sub_426480(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, unsigned __int8 a10)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int v16; // ST1C_4@1
  char result; // al@3
  int v18; // eax@1
  int v19; // eax@3
  char v20; // al@4
  int v21; // ST20_4@8
  int v22; // eax@8
  int v23; // [sp+Ch] [bp-34h]@1
  signed int v24; // [sp+3Ch] [bp-4h]@1
  char v25; // [sp+24h] [bp-1Ch]@1
  char v26; // [sp+1Ch] [bp-24h]@1
  char *v27; // [sp+14h] [bp-2Ch]@4
  int v28; // [sp+8h] [bp-38h]@4
  int v29; // [sp+2Ch] [bp-14h]@4
  char v30; // [sp+7h] [bp-39h]@4
  char v31; // [sp+13h] [bp-2Dh]@5
  char v32; // [sp+12h] [bp-2Eh]@7
  char v33; // [sp+11h] [bp-2Fh]@8

  v23 = this;
  v24 = 0;
  sub_409000(this + 692, (int)&v25, (int)&a2);
  v18 = sub_408DE0(v23 + 692, (int)&v26);
  if ( !sub_40EA30((int)&v25, v18) || a10 )
  {
    v27 = &ST04_1_0;
    v28 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    v20 = sub_420860(v23, ST04_1_0, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, v16, &v29);
    v30 = v20;
    if ( v20 )
    {
      if ( sub_424C60(v23, a9, v29) )
      {
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a9);
        v21 = a9;
        v22 = sub_408E40(v23 + 692, (int)&a2);
        sub_407290(v22, v21);
        v33 = 1;
        v24 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        result = v33;
      }
      else
      {
        v32 = 0;
        v24 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        result = v32;
      }
    }
    else
    {
      v31 = 0;
      v24 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      result = v31;
    }
  }
  else
  {
    v19 = sub_409420((int)&v25);
    sub_407290(a9, v19 + 28);
    v24 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    result = 1;
  }
  return result;
}

//----- (004265F0) --------------------------------------------------------
char __thiscall sub_4265F0(int this, char a2, int a3, int a4, char a5, int a6, int a7, int a8, int a9, int a10, int a11, char a12, int a13, int a14, int a15, int a16, int a17, int a18, char a19, char a20, signed int a21, __int16 a22, int a23, int a24, int a25, char a26)
{
  char ST08_1_0; // ST08_1@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  char result; // al@4
  int v33; // ST20_4@1
  signed int v34; // eax@1
  int v35; // eax@27
  int  s; // [sp+230h] [bp+0h]@1
  unsigned int v37; // [sp+220h] [bp-10h]@1
  int v38; // [sp+Ch] [bp-224h]@1
  signed int v39; // [sp+22Ch] [bp-4h]@1
  int v40; // [sp-20h] [bp-250h]@1
  int *v41; // [sp+18h] [bp-218h]@1
  int v42; // [sp+8h] [bp-228h]@1
  signed int v43; // [sp+4h] [bp-22Ch]@1
  unsigned int v44; // [sp+204h] [bp-2Ch]@1
  char v45; // [sp+17h] [bp-219h]@4
  char v46; // [sp+16h] [bp-21Ah]@9
  char v47; // [sp+15h] [bp-21Bh]@13
  char v48; // [sp+14h] [bp-21Ch]@17
  char v49; // [sp+1BCh] [bp-74h]@18
  char v50; // [sp+1CCh] [bp-64h]@18
  char v51; // [sp+1C0h] [bp-70h]@18
  signed int v52; // [sp+0h] [bp-230h]@18
  char v53; // [sp+19Ch] [bp-94h]@20
  __int16 v54; // [sp+198h] [bp-98h]@20
  __int16 v55; // [sp+19Ah] [bp-96h]@20
  __int16 v56; // [sp+1C8h] [bp-68h]@20
  char v57; // [sp+1E8h] [bp-48h]@20
  char v58; // [sp+17Ch] [bp-B4h]@21
  __int16 v59; // [sp+178h] [bp-B8h]@21
  __int16 v60; // [sp+17Ah] [bp-B6h]@21
  char v61; // [sp+15Ch] [bp-D4h]@22
  __int16 v62; // [sp+158h] [bp-D8h]@22
  __int16 v63; // [sp+15Ah] [bp-D6h]@22
  char v64; // [sp+2Ch] [bp-204h]@23
  __int16 v65; // [sp+3Ch] [bp-1F4h]@23
  char v66; // [sp+3Eh] [bp-1F2h]@23
  char v67; // [sp+1Ch] [bp-214h]@23
  char v68; // [sp+1Dh] [bp-213h]@23
  char v69; // [sp+1Eh] [bp-212h]@23
  char v70; // [sp+1Fh] [bp-211h]@23
  char v71; // [sp+20h] [bp-210h]@23
  char v72; // [sp+21h] [bp-20Fh]@23
  char v73; // [sp+22h] [bp-20Eh]@23
  char v74; // [sp+23h] [bp-20Dh]@23
  char v75; // [sp+24h] [bp-20Ch]@23
  char v76; // [sp+25h] [bp-20Bh]@23
  char v77; // [sp+26h] [bp-20Ah]@23
  char v78; // [sp+27h] [bp-209h]@23
  char v79; // [sp+28h] [bp-208h]@23
  char v80; // [sp+29h] [bp-207h]@23
  char v81; // [sp+2Ah] [bp-206h]@23
  char v82; // [sp+2Bh] [bp-205h]@23
  char v83; // [sp+46h] [bp-1EAh]@23
  signed int v84; // [sp+58h] [bp-1D8h]@23
  __int16 v85; // [sp+5Ch] [bp-1D4h]@23
  __int16 v86; // [sp+60h] [bp-1D0h]@23
  char v87; // [sp+64h] [bp-1CCh]@23
  char v88; // [sp+65h] [bp-1CBh]@23
  __int16 v89; // [sp+66h] [bp-1CAh]@23
  __int16 v90; // [sp+68h] [bp-1C8h]@23
  char v91; // [sp+6Ch] [bp-1C4h]@23
  char v92; // [sp+88h] [bp-1A8h]@23
  char v93; // [sp+8Ch] [bp-1A4h]@23
  char v94; // [sp+90h] [bp-1A0h]@24
  char v95; // [sp+1C4h] [bp-6Ch]@27
  char v96; // [sp+208h] [bp-28h]@27
  unsigned int v97; // [sp+1B8h] [bp-78h]@27
  char v98; // [sp+13h] [bp-21Dh]@27

  v37 = (unsigned int)& s ^ dword_43901C;
  v33 = (unsigned int)& s ^ dword_43901C;
  v38 = this;
  v39 = 0;
  v41 = &v40;
  v42 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a5);
  v34 = sub_41ACD0(v38, ST08_1_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, v33);
  v43 = v34;
  v44 = v34;
  if ( v34 < 0 && a21 != 1 && a21 )
  {
    v45 = 0;
    v39 = -1;
    sub_4070B0((int)&a2);
    result = v45;
  }
  else
  {
    if ( (signed int)v44 >= 0 && *(_DWORD *)(sub_4085D0(v38 + 8, v44) + 152) == -1 && a21 != 1 && a21 )
    {
      v46 = 0;
      v39 = -1;
      sub_4070B0((int)&a2);
      result = v46;
    }
    else
    {
      if ( (signed int)v44 < 0 || a21 != 2 || *(_BYTE *)(sub_4085D0(v38 + 8, v44) + 226) )
      {
        if ( (signed int)v44 < 0 || a21 != 3 || *(_BYTE *)(sub_4085D0(v38 + 8, v44) + 225) )
        {
          sub_42DCF0((int)&v49);
          LOBYTE(v39) = 1;
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v50);
          memset(&v51, 171, 8u);
          v52 = a21;
          if ( (unsigned int)a21 <= 3 )
          {
            switch ( v52 )
            {
              case 0:
                sub_42B170();
                LOBYTE(v39) = 2;
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v53);
                v54 = 0;
                v55 = a22;
                v56 = 1;
                sub_42E510((int)&v54, (int)&v57);
                LOBYTE(v39) = 1;
                sub_42B150((int)&v54);
                break;
              case 1:
                sub_42B170();
                LOBYTE(v39) = 3;
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v58);
                v59 = 3;
                v60 = a22;
                v56 = 1;
                sub_42E510((int)&v59, (int)&v57);
                LOBYTE(v39) = 1;
                sub_42B150((int)&v59);
                break;
              case 2:
                sub_42B170();
                LOBYTE(v39) = 4;
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v61);
                v62 = 2;
                v63 = a22;
                v56 = 1;
                sub_42E510((int)&v62, (int)&v57);
                LOBYTE(v39) = 1;
                sub_42B150((int)&v62);
                break;
              case 3:
                sub_42B4B0((int)&v64);
                LOBYTE(v39) = 5;
                v65 = 0;
                memset(&v66, 89, 8u);
                v67 = 9;
                v68 = 70;
                v69 = 19;
                v70 = 73;
                v71 = 76;
                v72 = 127;
                v73 = 17;
                v74 = -47;
                v75 = -126;
                v76 = 34;
                v77 = 68;
                v78 = 69;
                v79 = 83;
                v80 = 84;
                v81 = 0;
                v82 = 0;
                memcpy(&v83, &v67, 0x10u);
                v84 = 16777343;
                v85 = 8716;
                v86 = 8;
                v87 = 1;
                v88 = 0;
                v89 = 0;
                v90 = 1;
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v91);
                memcpy(&v92, &a19, 4u);
                memcpy(&v93, &a20, 4u);
                if ( *(_BYTE *)(sub_4085D0(v38 + 8, v44) + 226) )
                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                    &v94,
                    "{0946134E-4C7F-11D1-8222-444553540000}");
                else
                  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(
                    &v94,
                    "{09461349-4C7F-11D1-8222-444553540000}");
                v56 = 2;
                sub_42EA90((int)&v64, (int)&v57);
                LOBYTE(v39) = 1;
                sub_42B490((int)&v64);
                break;
            }
          }
          memcpy(&v95, &a26, 2u);
          sub_401700((int)&v96);
          LOBYTE(v39) = 6;
          sub_42DE70((int)&v49, (int)&v96, 0);
          v35 = sub_4019B0((int)&v96);
          v97 = v35;
          sub_401990((int)&v96, v35 + 4);
          *(_BYTE *)sub_4019D0((int)&v96, v97) = 0;
          *(_BYTE *)sub_4019D0((int)&v96, v97 + 1) = 3;
          *(_BYTE *)sub_4019D0((int)&v96, v97 + 2) = 0;
          *(_BYTE *)sub_4019D0((int)&v96, v97 + 3) = 0;
          v98 = sub_41E760(v38, 4, 6, 0, (int)&v96) == 1;
          LOBYTE(v39) = 1;
          sub_4017F0((int)&v96);
          LOBYTE(v39) = 0;
          sub_42DCD0((int)&v49);
          v39 = -1;
          sub_4070B0((int)&a2);
          result = v98;
        }
        else
        {
          v48 = 0;
          v39 = -1;
          sub_4070B0((int)&a2);
          result = v48;
        }
      }
      else
      {
        v47 = 0;
        v39 = -1;
        sub_4070B0((int)&a2);
        result = v47;
      }
    }
  }
  return result;
}

//----- (00426B90) --------------------------------------------------------
char __thiscall sub_426B90(int this, int a2, char a3, int a4, int a5, int a6, int a7, int a8, int a9, u_short a10, int a11, unsigned __int8 a12)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  u_short v20; // ST20_2@1
  signed int v21; // eax@1
  int v22; // [sp+Ch] [bp-58h]@1
  signed int v23; // [sp+60h] [bp-4h]@1
  char *v24; // [sp+30h] [bp-34h]@1
  int v25; // [sp+8h] [bp-5Ch]@1
  signed int v26; // [sp+4h] [bp-60h]@1
  char v27; // [sp+2Fh] [bp-35h]@2
  char v28; // [sp+2Eh] [bp-36h]@4
  char v29; // [sp+2Dh] [bp-37h]@6
  char v30; // [sp+2Ch] [bp-38h]@8
  char v31; // [sp+2Bh] [bp-39h]@10
  char v32; // [sp+2Ah] [bp-3Ah]@12
  int v33; // [sp+50h] [bp-14h]@13
  char v34; // [sp+29h] [bp-3Bh]@14
  char v35; // [sp+28h] [bp-3Ch]@16
  char v36; // [sp+27h] [bp-3Dh]@18
  int v37; // [sp+44h] [bp-20h]@20
  char v38; // [sp+26h] [bp-3Eh]@21
  int v39; // [sp+48h] [bp-1Ch]@22
  char v40; // [sp+25h] [bp-3Fh]@23
  int v41; // [sp+34h] [bp-30h]@24
  char v42; // [sp+24h] [bp-40h]@25
  int v43; // [sp+4Ch] [bp-18h]@26
  char v44; // [sp+23h] [bp-41h]@27
  int v45; // [sp+38h] [bp-2Ch]@28
  char v46; // [sp+22h] [bp-42h]@29
  int v47; // [sp+3Ch] [bp-28h]@30
  char v48; // [sp+21h] [bp-43h]@31
  int v49; // [sp+40h] [bp-24h]@32
  char v50; // [sp+20h] [bp-44h]@33
  char v51; // [sp+1Fh] [bp-45h]@35
  char v52; // [sp+1Eh] [bp-46h]@37
  char v53; // [sp+1Dh] [bp-47h]@39
  char v54; // [sp+1Ch] [bp-48h]@41
  char v55; // [sp+1Bh] [bp-49h]@43
  char v56; // [sp+1Ah] [bp-4Ah]@45
  char v57; // [sp+19h] [bp-4Bh]@47
  char v58; // [sp+18h] [bp-4Ch]@49
  char v59; // [sp+17h] [bp-4Dh]@51
  char v60; // [sp+16h] [bp-4Eh]@53
  char v61; // [sp+15h] [bp-4Fh]@56
  char v62; // [sp+14h] [bp-50h]@59
  char v63; // [sp+13h] [bp-51h]@61
  char v64; // [sp+12h] [bp-52h]@63

  v22 = this;
  v23 = 0;
  *(_DWORD *)(this + 412) = 14;
  v20 = a10;
  v24 = &ST04_1_0;
  v25 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
  v21 = sub_41A8E0(v22, ST04_1_0, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, v20);
  v26 = v21;
  *(_DWORD *)(v22 + 600) = v21;
  if ( *(_DWORD *)(v22 + 600) < 0 )
  {
    v27 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v27;
  }
  *(_DWORD *)(v22 + 412) += 3;
  if ( !(unsigned __int8)sub_425000(v22) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v28 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v28;
  }
  *(_DWORD *)(v22 + 412) += 3;
  if ( !(unsigned __int8)sub_423100(v22, a11) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v29 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v29;
  }
  *(_DWORD *)(v22 + 412) += 4;
  if ( !(unsigned __int8)sub_4245A0(v22) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v30 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v30;
  }
  *(_DWORD *)(v22 + 412) += 4;
  if ( !(unsigned __int8)sub_41FBA0(v22) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v31 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v31;
  }
  *(_DWORD *)(v22 + 412) += 3;
  if ( !(unsigned __int8)sub_4243C0(v22) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v32 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v32;
  }
  *(_DWORD *)(v22 + 412) += 3;
  if ( !sub_41FB70(v22, (int)&v33) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v34 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v34;
  }
  *(_DWORD *)(v22 + 412) += 4;
  if ( !(unsigned __int8)sub_424130(v22, v33) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v35 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v35;
  }
  *(_DWORD *)(v22 + 412) += 4;
  if ( !(unsigned __int8)sub_41FA70(v22) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v36 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v36;
  }
  *(_DWORD *)(v22 + 412) += 3;
  if ( !a12 )
  {
    if ( !sub_41FA40(v22, (int)&v37) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v38 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v38;
    }
    ++*(_DWORD *)(v22 + 412);
    if ( !sub_41F370(v22, (int)&v39) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v40 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v40;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !sub_41F340(v22, (int)&v41) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v42 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v42;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !sub_41FA10(v22, (int)&v43) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v44 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v44;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !sub_41F600(v22, (int)&v45) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v46 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v46;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !sub_41F5D0(v22, (int)&v47) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v48 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v48;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !sub_41F3A0(v22, (int)&v49) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v50 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v50;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !(unsigned __int8)sub_424000(v22, v43) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v51 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v51;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !(unsigned __int8)sub_423F70(v22, v45) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v52 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v52;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !(unsigned __int8)sub_423E80(v22, v47) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v53 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v53;
    }
    *(_DWORD *)(v22 + 412) += 4;
    if ( !(unsigned __int8)sub_423DF0(v22, v49) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v54 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v54;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !(unsigned __int8)sub_423D60(v22, v39) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v55 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v55;
    }
    *(_DWORD *)(v22 + 412) += 4;
    if ( !(unsigned __int8)sub_425150(v22, v41) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v56 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v56;
    }
    *(_DWORD *)(v22 + 412) += 3;
    if ( !(unsigned __int8)sub_41F630(v22) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v57 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v57;
    }
    *(_DWORD *)(v22 + 412) += 4;
    if ( !(unsigned __int8)sub_424090(v22, v37) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v58 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v58;
    }
    ++*(_DWORD *)(v22 + 412);
    if ( !(unsigned __int8)sub_41F3D0(v22) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v59 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v59;
    }
    *(_DWORD *)(v22 + 412) += 4;
    if ( !(unsigned __int8)sub_423AC0(v22, a2, 1) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v60 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v60;
    }
    *(_DWORD *)(v22 + 784) = a2;
  }
  if ( !(unsigned __int8)sub_41E910(v22) )
  {
    closesocket(*(_DWORD *)(v22 + 600));
    *(_DWORD *)(v22 + 600) = -1;
    v61 = 0;
    v23 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
    return v61;
  }
  *(_DWORD *)(v22 + 412) += 3;
  if ( !a12 )
  {
    if ( !sub_41F310(v22) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v62 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v62;
    }
    *(_DWORD *)(v22 + 412) += 4;
    if ( !(unsigned __int8)sub_423AC0(v22, a2, 0) )
    {
      closesocket(*(_DWORD *)(v22 + 600));
      *(_DWORD *)(v22 + 600) = -1;
      v63 = 0;
      v23 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
      return v63;
    }
    *(_DWORD *)(v22 + 784) = a2;
  }
  *(_DWORD *)(v22 + 412) = 100;
  v64 = 1;
  v23 = -1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a3);
  return v64;
}

//----- (004276F0) --------------------------------------------------------
char __thiscall sub_4276F0(int this, int a2)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  int ST3C_4_0; // ST3C_4@0
  int v13; // ST24_4@1
  char result; // al@2
  int v15; // ST0C_4@3
  int v16; // ST10_4@3
  int v17; // ST14_4@3
  int v18; // ST18_4@3
  int v19; // ST1C_4@3
  u_short v20; // ST28_2@3
  signed int v21; // eax@3
  u_short v22; // ST20_2@11
  char v23; // al@11
  int  s; // [sp+21Ch] [bp+0h]@1
  unsigned int v25; // [sp+20Ch] [bp-10h]@1
  int v26; // [sp+10h] [bp-20Ch]@1
  __int16 v27; // [sp+40h] [bp-1DCh]@1
  struct WSAData WSAData; // [sp+78h] [bp-1A4h]@1
  char v29; // [sp+44h] [bp-1D8h]@3
  signed int v30; // [sp+218h] [bp-4h]@3
  char v31; // [sp+5Ch] [bp-1C0h]@3
  char v32; // [sp+28h] [bp-1F4h]@3
  int *v33; // [sp+20h] [bp-1FCh]@3
  int v34; // [sp+Ch] [bp-210h]@3
  signed int v35; // [sp+8h] [bp-214h]@3
  char v36; // [sp+1Fh] [bp-1FDh]@4
  char v37; // [sp+1Eh] [bp-1FEh]@6
  char v38; // [sp+1Dh] [bp-1FFh]@8
  int v39; // [sp+24h] [bp-1F8h]@9
  char v40; // [sp+1Ch] [bp-200h]@10
  char *v41; // [sp+14h] [bp-208h]@11
  int v42; // [sp+4h] [bp-218h]@11
  char v43; // [sp+3h] [bp-219h]@11
  char v44; // [sp+1Bh] [bp-201h]@11

  v25 = (unsigned int)& s ^ dword_43901C;
  v26 = this;
  v27 = 257;
  if ( WSAStartup(0x101u, &WSAData) )
  {
    result = 0;
  }
  else
  {
    *(_WORD *)(v26 + 320) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v26 + 324, &unk_43234F);
    sub_401700((int)&v29);
    v30 = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v31,
      ST30_4_0,
      ST34_4_0,
      ST38_4_0,
      ST3C_4_0);
    LOBYTE(v30) = 1;
    sub_401700((int)&v32);
    LOBYTE(v30) = 2;
    *(_DWORD *)(v26 + 412) = 0;
    v33 = &ST10_4_0;
    v34 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(v26 + 564);
    v21 = sub_41A8E0(v26, v15, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, ST20_4_0, v13, v20);
    v35 = v21;
    *(_DWORD *)(v26 + 600) = v21;
    if ( *(_DWORD *)(v26 + 600) >= 0 )
    {
      *(_DWORD *)(v26 + 412) += 2;
      if ( sub_425000(v26) )
      {
        *(_DWORD *)(v26 + 412) += 2;
        if ( sub_4235D0(v26) )
        {
          *(_DWORD *)(v26 + 412) += 8;
          if ( sub_423200(v26, (int)&v31, (int)&v39, (int)&v32) )
          {
            *(_DWORD *)(v26 + 412) += 2;
            sub_41DEC0(v26);
            closesocket(*(_DWORD *)(v26 + 600));
            *(_DWORD *)(v26 + 600) = -1;
            v22 = v39;
            v41 = &ST04_1_0;
            v42 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
            v23 = sub_426B90(v26, a2, ST04_1_0, ST08_4_0, v15, v16, v17, v18, v19, v22, (int)&v32, 0);
            v43 = v23;
            v44 = v23;
            LOBYTE(v30) = 1;
            sub_4017F0((int)&v32);
            LOBYTE(v30) = 0;
            std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
            v30 = -1;
            sub_4017F0((int)&v29);
            result = v44;
          }
          else
          {
            closesocket(*(_DWORD *)(v26 + 600));
            *(_DWORD *)(v26 + 600) = -1;
            v40 = 0;
            LOBYTE(v30) = 1;
            sub_4017F0((int)&v32);
            LOBYTE(v30) = 0;
            std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
            v30 = -1;
            sub_4017F0((int)&v29);
            result = v40;
          }
        }
        else
        {
          closesocket(*(_DWORD *)(v26 + 600));
          *(_DWORD *)(v26 + 600) = -1;
          v38 = 0;
          LOBYTE(v30) = 1;
          sub_4017F0((int)&v32);
          LOBYTE(v30) = 0;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
          v30 = -1;
          sub_4017F0((int)&v29);
          result = v38;
        }
      }
      else
      {
        closesocket(*(_DWORD *)(v26 + 600));
        *(_DWORD *)(v26 + 600) = -1;
        v37 = 0;
        LOBYTE(v30) = 1;
        sub_4017F0((int)&v32);
        LOBYTE(v30) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
        v30 = -1;
        sub_4017F0((int)&v29);
        result = v37;
      }
    }
    else
    {
      v36 = 0;
      LOBYTE(v30) = 1;
      sub_4017F0((int)&v32);
      LOBYTE(v30) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v31);
      v30 = -1;
      sub_4017F0((int)&v29);
      result = v36;
    }
  }
  return result;
}

//----- (00427B20) --------------------------------------------------------
char __thiscall sub_427B20(int this, void *a2, int a3)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  char result; // al@2
  int v11; // ST20_4@32
  int v12; // ST20_4@57
  __time64_t v13; // qax@1
  char v14; // ST24_1@28
  int v15; // eax@51
  int v16; // edx@51
  int v17; // eax@52
  int v18; // edx@52
  int v19; // eax@53
  int v20; // edx@53
  int  s; // [sp+348h] [bp+0h]@1
  unsigned int v22; // [sp+338h] [bp-10h]@1
  int v23; // [sp+3Ch] [bp-30Ch]@1
  char v24; // [sp+2ECh] [bp-5Ch]@1
  signed int v25; // [sp+344h] [bp-4h]@1
  unsigned __int16 v26; // [sp+2F8h] [bp-50h]@3
  unsigned __int16 v27; // [sp+2CCh] [bp-7Ch]@4
  char v28; // [sp+318h] [bp-30h]@4
  signed int v29; // [sp+38h] [bp-310h]@6
  __int16 v30; // [sp+2CEh] [bp-7Ah]@13
  char v31; // [sp+1A4h] [bp-1A4h]@15
  char v32; // [sp+1DCh] [bp-16Ch]@17
  char v33; // [sp+208h] [bp-140h]@18
  char v34; // [sp+200h] [bp-148h]@22
  char v35; // [sp+204h] [bp-144h]@22
  char v36; // [sp+2F0h] [bp-58h]@22
  char *v37; // [sp+80h] [bp-2C8h]@28
  char v38; // [sp+2FCh] [bp-4Ch]@28
  int v39; // [sp+34h] [bp-314h]@28
  char v40; // [sp+7Fh] [bp-2C9h]@28
  char v41; // [sp+1D8h] [bp-170h]@30
  char v42; // [sp+270h] [bp-D8h]@32
  int *v43; // [sp+78h] [bp-2D0h]@34
  int v44; // [sp+30h] [bp-318h]@34
  char v45; // [sp+77h] [bp-2D1h]@34
  char v46; // [sp+180h] [bp-1C8h]@37
  unsigned __int8 v47; // [sp+184h] [bp-1C4h]@39
  int v48; // [sp+17Ch] [bp-1CCh]@47
  int v49; // [sp+2Ch] [bp-31Ch]@49
  int *v50; // [sp+70h] [bp-2D8h]@51
  int v51; // [sp+28h] [bp-320h]@51
  int v52; // [sp+24h] [bp-324h]@51
  int *v53; // [sp+6Ch] [bp-2DCh]@51
  int v54; // [sp+20h] [bp-328h]@51
  char v55; // [sp+6Bh] [bp-2DDh]@51
  int *v56; // [sp+64h] [bp-2E4h]@52
  int v57; // [sp+1Ch] [bp-32Ch]@52
  int v58; // [sp+18h] [bp-330h]@52
  int *v59; // [sp+60h] [bp-2E8h]@52
  int v60; // [sp+14h] [bp-334h]@52
  char v61; // [sp+5Fh] [bp-2E9h]@52
  int *v62; // [sp+58h] [bp-2F0h]@53
  int v63; // [sp+10h] [bp-338h]@53
  int v64; // [sp+Ch] [bp-33Ch]@53
  int *v65; // [sp+54h] [bp-2F4h]@53
  int v66; // [sp+8h] [bp-340h]@53
  char v67; // [sp+53h] [bp-2F5h]@53
  int *v68; // [sp+4Ch] [bp-2FCh]@54
  int v69; // [sp+4h] [bp-344h]@54
  char v70; // [sp+4Bh] [bp-2FDh]@54
  char v71; // [sp+108h] [bp-240h]@55
  char v72; // [sp+8Ch] [bp-2BCh]@55
  char v73; // [sp+124h] [bp-224h]@57
  int *v74; // [sp+44h] [bp-304h]@59
  int v75; // [sp+0h] [bp-348h]@59
  char v76; // [sp+43h] [bp-305h]@59

  v22 = (unsigned int)& s ^ dword_43901C;
  v23 = this;
  v13 = sub_41AB10(0);
  *((_DWORD *)a2 + 22) = v13;
  *((_DWORD *)a2 + 23) = *((_DWORD *)&v13 + 1);
  *((_BYTE *)a2 + 8) = 0;
  sub_42DCB0((int)&v24);
  v25 = 0;
  if ( !(unsigned __int8)sub_42ED90((int)&v24, a3, 0) )
  {
    v25 = -1;
    sub_42DC90((int)&v24);
    return 0;
  }
  if ( v26 != 1 )
  {
    if ( v26 == 2 )
    {
      sub_42B4B0((int)&v31);
      LOBYTE(v25) = 2;
      if ( !(unsigned __int8)sub_42EF80((int)&v31, (int)&v28) )
      {
        LOBYTE(v25) = 0;
        sub_42B490((int)&v31);
        v25 = -1;
        sub_42DC90((int)&v24);
        return 0;
      }
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_((char *)a2 + 12);
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_((char *)a2 + 40);
      if ( (unsigned __int8)v32 == 1 )
      {
        if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                &v33,
                                "{0946134E-4C7F-11D1-8222-444553540000}")
          || (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                &v33,
                                "{0946134e-4c7f-11d1-8222-444553540000}") )
          *((_DWORD *)a2 + 19) = 3;
        else
          *((_DWORD *)a2 + 19) = 1;
        memcpy((char *)a2 + 68, &v34, 4u);
        memcpy((char *)a2 + 72, &v35, 4u);
        memcpy(a2, &v36, 8u);
        *((_BYTE *)a2 + 8) = 1;
        LOBYTE(v25) = 0;
        sub_42B490((int)&v31);
        v25 = -1;
        sub_42DC90((int)&v24);
        return 1;
      }
      if ( (unsigned __int8)v32 == 232
        || (unsigned __int8)v32 == 233
        || (unsigned __int8)v32 == 234
        || (unsigned __int8)v32 == 235
        || (unsigned __int8)v32 == 236 )
      {
        v14 = v32;
        v37 = &ST04_1_0;
        v39 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v38);
        sub_420B30(v23, ST04_1_0, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, &v36, v14);
        v40 = 0;
        LOBYTE(v25) = 0;
        sub_42B490((int)&v31);
        v25 = -1;
        sub_42DC90((int)&v24);
        return v40;
      }
      if ( (unsigned __int8)v32 == 26 )
      {
        if ( sub_42AA40((int)&v41) )
        {
          if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(&v38, &v42) )
          {
            LOBYTE(v25) = 0;
            sub_42B490((int)&v31);
            v25 = -1;
            sub_42DC90((int)&v24);
            result = 0;
          }
          else
          {
            v43 = &ST08_4_0;
            v44 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v38);
            sub_4201B0(v23, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, v11, &v36);
            v45 = 0;
            LOBYTE(v25) = 0;
            sub_42B490((int)&v31);
            v25 = -1;
            sub_42DC90((int)&v24);
            result = v45;
          }
        }
        else
        {
          LOBYTE(v25) = 0;
          sub_42B490((int)&v31);
          v25 = -1;
          sub_42DC90((int)&v24);
          result = 0;
        }
        return result;
      }
      LOBYTE(v25) = 0;
      sub_42B490((int)&v31);
    }
    else
    {
      if ( v26 == 4 )
      {
        sub_42A5B0();
        LOBYTE(v25) = 3;
        if ( sub_42B320(&v46, (int)&v28) )
        {
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_((char *)a2 + 12);
          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_((char *)a2 + 40);
          if ( v47 == 4 || v47 == 6 || v47 == 7 || v47 == 8 || v47 == 9 || v47 == 12 || v47 == 13 || v47 == 14 )
          {
            v48 = std__basic_string_char_std__char_traits_char__std__allocator_char____find_last_of(
                    (char *)a2 + 40,
                    &unk_432B18,
                    std__basic_string_char_std__char_traits_char__std__allocator_char____npos);
            if ( v48 != (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
              std__basic_string_char_std__char_traits_char__std__allocator_char____erase((char *)a2 + 40, 0, v48);
          }
          v49 = v47 - 6;
          if ( (unsigned int)v47 - 6 > 0x14 )
          {
LABEL_60:
            LOBYTE(v25) = 0;
            sub_42A590((int)&v46);
            v25 = -1;
            sub_42DC90((int)&v24);
            result = 1;
          }
          else
          {
            switch ( v49 )
            {
              case 0:
                v50 = &ST0C_4_0;
                v15 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 40);
                v51 = v15;
                v52 = v15;
                LOBYTE(v25) = 4;
                v53 = &ST0C_4_0;
                v54 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 12);
                v16 = *(_DWORD *)v23;
                LOBYTE(v25) = 3;
                (*(int (__thiscall **)(int))(v16 + 16))(v23);
                v55 = 0;
                LOBYTE(v25) = 0;
                sub_42A590((int)&v46);
                v25 = -1;
                sub_42DC90((int)&v24);
                result = v55;
                break;
              case 1:
                v56 = &ST08_4_0;
                v17 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 40);
                v57 = v17;
                v58 = v17;
                LOBYTE(v25) = 5;
                v59 = &ST0C_4_0;
                v60 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 12);
                v18 = *(_DWORD *)v23;
                LOBYTE(v25) = 3;
                (*(int (__thiscall **)(int))(v18 + 20))(v23);
                v61 = 0;
                LOBYTE(v25) = 0;
                sub_42A590((int)&v46);
                v25 = -1;
                sub_42DC90((int)&v24);
                result = v61;
                break;
              case 2:
                v62 = &ST08_4_0;
                v19 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 40);
                v63 = v19;
                v64 = v19;
                LOBYTE(v25) = 6;
                v65 = &ST0C_4_0;
                v66 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 12);
                v20 = *(_DWORD *)v23;
                LOBYTE(v25) = 3;
                (*(int (__thiscall **)(int))(v20 + 20))(v23);
                v67 = 0;
                LOBYTE(v25) = 0;
                sub_42A590((int)&v46);
                v25 = -1;
                sub_42DC90((int)&v24);
                result = v67;
                break;
              case 6:
                v68 = &ST0C_4_0;
                v69 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__((char *)a2 + 12);
                (*(int (__thiscall **)(int))(*(_DWORD *)v23 + 32))(v23);
                v70 = 0;
                LOBYTE(v25) = 0;
                sub_42A590((int)&v46);
                v25 = -1;
                sub_42DC90((int)&v24);
                result = v70;
                break;
              case 20:
                sub_42B020();
                LOBYTE(v25) = 7;
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v71);
                if ( sub_42AA40((int)&v72) )
                {
                  if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(&v38, &v73) )
                  {
                    LOBYTE(v25) = 3;
                    sub_42AF60((int)&v72);
                    LOBYTE(v25) = 0;
                    sub_42A590((int)&v46);
                    v25 = -1;
                    sub_42DC90((int)&v24);
                    result = 0;
                  }
                  else
                  {
                    v74 = &ST08_4_0;
                    v75 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v38);
                    sub_4201B0(v23, ST08_4_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, v12, &v36);
                    v76 = 0;
                    LOBYTE(v25) = 3;
                    sub_42AF60((int)&v72);
                    LOBYTE(v25) = 0;
                    sub_42A590((int)&v46);
                    v25 = -1;
                    sub_42DC90((int)&v24);
                    result = v76;
                  }
                }
                else
                {
                  LOBYTE(v25) = 3;
                  sub_42AF60((int)&v72);
                  LOBYTE(v25) = 0;
                  sub_42A590((int)&v46);
                  v25 = -1;
                  sub_42DC90((int)&v24);
                  result = 0;
                }
                break;
              case 3:
              case 4:
              case 5:
              case 7:
              case 8:
              case 9:
              case 10:
              case 11:
              case 12:
              case 13:
              case 14:
              case 15:
              case 16:
              case 17:
              case 18:
              case 19:
                goto LABEL_60;
            }
          }
        }
        else
        {
          LOBYTE(v25) = 0;
          sub_42A590((int)&v46);
          v25 = -1;
          sub_42DC90((int)&v24);
          result = 0;
        }
        return result;
      }
    }
    v25 = -1;
    sub_42DC90((int)&v24);
    return 0;
  }
  sub_42B170();
  LOBYTE(v25) = 1;
  if ( !(unsigned __int8)sub_42BD30(&v27, (int)&v28) )
  {
    LOBYTE(v25) = 0;
    sub_42B150((int)&v27);
    v25 = -1;
    sub_42DC90((int)&v24);
    return 0;
  }
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_((char *)a2 + 12);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_((char *)a2 + 40);
  v29 = v27;
  if ( v27 )
  {
    if ( v29 == 2 )
    {
      *((_DWORD *)a2 + 19) = 2;
    }
    else
    {
      if ( v29 != 3 )
      {
        LOBYTE(v25) = 0;
        sub_42B150((int)&v27);
        v25 = -1;
        sub_42DC90((int)&v24);
        return 0;
      }
      *((_DWORD *)a2 + 19) = 1;
    }
  }
  else
  {
    *((_DWORD *)a2 + 19) = 0;
  }
  *((_WORD *)a2 + 40) = v30;
  LOBYTE(v25) = 0;
  sub_42B150((int)&v27);
  v25 = -1;
  sub_42DC90((int)&v24);
  return 1;
}

//----- (00428560) --------------------------------------------------------
char __thiscall sub_428560(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16)
{
  char ST04_1_0; // ST04_1@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  char ST20_1_0; // ST20_1@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  __int16 ST3C_2_0; // ST3C_2@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  int ST54_4_0; // ST54_4@0
  int ST58_4_0; // ST58_4@0
  int ST5C_4_0; // ST5C_4@0
  int ST60_4_0; // ST60_4@0
  int ST64_4_0; // ST64_4@0
  int ST68_4_0; // ST68_4@0
  int ST6C_4_0; // ST6C_4@0
  int ST70_4_0; // ST70_4@0
  int ST74_4_0; // ST74_4@0
  int ST78_4_0; // ST78_4@0
  int ST7C_4_0; // ST7C_4@0
  int ST80_4_0; // ST80_4@0
  int ST84_4_0; // ST84_4@0
  int ST88_4_0; // ST88_4@0
  int ST8C_4_0; // ST8C_4@0
  int ST90_4_0; // ST90_4@0
  int ST94_4_0; // ST94_4@0
  int ST98_4_0; // ST98_4@0
  int ST9C_4_0; // ST9C_4@0
  int STA0_4_0; // STA0_4@0
  int STA4_4_0; // STA4_4@0
  int STA8_4_0; // STA8_4@0
  int STAC_4_0; // STAC_4@0
  int STB0_4_0; // STB0_4@0
  int STB4_4_0; // STB4_4@0
  int STB8_4_0; // STB8_4@0
  int STBC_4_0; // STBC_4@0
  int STC0_4_0; // STC0_4@0
  int STC4_4_0; // STC4_4@0
  int STC8_4_0; // STC8_4@0
  int STCC_4_0; // STCC_4@0
  int STD0_4_0; // STD0_4@0
  int STD4_4_0; // STD4_4@0
  int STD8_4_0; // STD8_4@0
  int STDC_4_0; // STDC_4@0
  int STE0_4_0; // STE0_4@0
  int STE4_4_0; // STE4_4@0
  int STE8_4_0; // STE8_4@0
  int STEC_4_0; // STEC_4@0
  int STF0_4_0; // STF0_4@0
  int STF4_4_0; // STF4_4@0
  int STF8_4_0; // STF8_4@0
  int ST134_4_0; // ST134_4@0
  int ST138_4_0; // ST138_4@0
  int ST13C_4_0; // ST13C_4@0
  int ST140_4_0; // ST140_4@0
  int ST144_4_0; // ST144_4@0
  int ST148_4_0; // ST148_4@0
  char ST14C_1_0; // ST14C_1@0
  int ST154_4_0; // ST154_4@0
  int ST158_4_0; // ST158_4@0
  int ST15C_4_0; // ST15C_4@0
  int ST160_4_0; // ST160_4@0
  char ST16C_1_0; // ST16C_1@0
  int ST170_4_0; // ST170_4@0
  int ST174_4_0; // ST174_4@0
  int ST178_4_0; // ST178_4@0
  int ST17C_4_0; // ST17C_4@0
  int ST180_4_0; // ST180_4@0
  int v95; // ST16C_4@1
  int v96; // ST170_4@1
  int v97; // ST174_4@1
  int v98; // ST178_4@1
  int v99; // ST17C_4@1
  int v100; // ST180_4@1
  char result; // al@4
  char v102; // ST168_1@6
  int v103; // ST16C_4@6
  int v104; // ST170_4@6
  int v105; // ST174_4@6
  int v106; // ST178_4@6
  int v107; // ST17C_4@6
  int v108; // ST180_4@6
  int v109; // ST184_4@1
  signed int v110; // eax@1
  int v111; // eax@6
  int v112; // ST184_4@6
  char v113; // al@6
  int v114; // ST184_4@8
  int v115; // eax@8
  int v116; // eax@8
  char v117; // ST130_1@8
  int v118; // ST150_4@8
  int v119; // ST164_4@8
  char v120; // al@8
  int v121; // eax@9
  char v122; // al@9
  int v123; // eax@20
  int  s; // [sp+214h] [bp+0h]@1
  unsigned int v125; // [sp+204h] [bp-10h]@1
  int v126; // [sp+30h] [bp-1E4h]@1
  signed int v127; // [sp+210h] [bp-4h]@1
  char *v128; // [sp+54h] [bp-1C0h]@1
  int v129; // [sp+2Ch] [bp-1E8h]@1
  signed int v130; // [sp+28h] [bp-1ECh]@1
  unsigned int v131; // [sp+7Ch] [bp-198h]@1
  char v132; // [sp+53h] [bp-1C1h]@4
  int v133; // [sp+0h] [bp-214h]@6
  char *v134; // [sp+4Ch] [bp-1C8h]@6
  int v135; // [sp+24h] [bp-1F0h]@6
  char v136; // [sp+23h] [bp-1F1h]@6
  char v137; // [sp+4Bh] [bp-1C9h]@7
  char v138; // [sp+58h] [bp-1BCh]@7
  char *v139; // [sp+44h] [bp-1D0h]@8
  int v140; // [sp+1Ch] [bp-1F8h]@8
  int v141; // [sp+18h] [bp-1FCh]@8
  int *v142; // [sp+40h] [bp-1D4h]@8
  int v143; // [sp+14h] [bp-200h]@8
  int v144; // [sp+10h] [bp-204h]@8
  int *v145; // [sp+3Ch] [bp-1D8h]@8
  int v146; // [sp+Ch] [bp-208h]@8
  char miif; // [sp+Bh] [bp-209h]@8
  char v148; // [sp+4Ah] [bp-1CAh]@8
  char forbid_this_client; // [sp+80h] [bp-194h]@9
  char v150; // [sp+9Ch] [bp-178h]@9
  char *v151; // [sp+38h] [bp-1DCh]@9
  int p->pkt.type; // [sp+4h] [bp-210h]@9
  char p->data; // [sp+37h] [bp-1DDh]@12
  __int16 p->pkt.data_len; // [sp+74h] [bp-1A0h]@13
  int v155; // [sp+78h] [bp-19Ch]@13
  char v156; // [sp+36h] [bp-1DEh]@16
  char v157; // [sp+35h] [bp-1DFh]@21

  v125 = (unsigned int)& s ^ dword_43901C;
  v109 = (unsigned int)& s ^ dword_43901C;
  v126 = this;
  v127 = 1;
  v128 = &v102;
  v129 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v110 = sub_41ACD0(v126, ST16C_1_0, ST170_4_0, ST174_4_0, ST178_4_0, ST17C_4_0, ST180_4_0, v109);
  v130 = v110;
  v131 = v110;
  if ( v110 >= 0 )
  {
    if ( *(_BYTE *)(sub_4085D0(v126 + 8, v131) + 90) )
    {
      v111 = sub_4085D0(v126 + 8, v131);
      std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(v111 + 60);
      LOBYTE(v127) = 2;
      v133 = a16;
      v134 = &ST16C_1_0;
      v135 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      v113 = sub_425E20(v102, v95, v96, v97, v98, v99, v100, v112);
      v136 = v113;
      if ( v113 )
      {
        v114 = a16;
        v139 = &v102;
        v115 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v138);
        v140 = v115;
        v141 = v115;
        LOBYTE(v127) = 3;
        v142 = &ST154_4_0;
        v116 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        v143 = v116;
        v144 = v116;
        LOBYTE(v127) = 4;
        v145 = &ST134_4_0;
        v146 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        LOBYTE(v127) = 2;
        v120 = sub_425FE0(
                 v126,
                 v117,
                 ST134_4_0,
                 ST138_4_0,
                 ST13C_4_0,
                 ST140_4_0,
                 ST144_4_0,
                 ST148_4_0,
                 ST14C_1_0,
                 v118,
                 ST154_4_0,
                 ST158_4_0,
                 ST15C_4_0,
                 ST160_4_0,
                 v119,
                 v102,
                 v103,
                 v104,
                 v105,
                 v106,
                 v107,
                 v108,
                 v114);
        miif = v120;
        v148 = v120;
        LOBYTE(v127) = 1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v138);
        LOBYTE(v127) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        v127 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        result = v148;
      }
      else
      {
        v137 = 0;
        LOBYTE(v127) = 1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v138);
        LOBYTE(v127) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        v127 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        result = v137;
      }
    }
    else
    {
      v121 = sub_4085D0(v126 + 8, v131);
      sub_4079E0((int)&forbid_this_client, v121);
      LOBYTE(v127) = 5;
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(&v150);
      v151 = &ST04_1_0;
      p->pkt.type = sub_4079E0((int)&ST04_1_0, (int)&forbid_this_client);
      v122 = sub_422490(
               v126,
               ST04_1_0,
               ST08_4_0,
               ST0C_4_0,
               ST10_4_0,
               ST14_4_0,
               ST18_4_0,
               ST1C_4_0,
               ST20_1_0,
               ST24_4_0,
               ST28_4_0,
               ST2C_4_0,
               ST30_4_0,
               ST34_4_0,
               ST38_4_0,
               ST3C_2_0,
               ST40_4_0,
               ST44_4_0,
               ST48_4_0,
               ST4C_4_0,
               ST50_4_0,
               ST54_4_0,
               ST58_4_0,
               ST5C_4_0,
               ST60_4_0,
               ST64_4_0,
               ST68_4_0,
               ST6C_4_0,
               ST70_4_0,
               ST74_4_0,
               ST78_4_0,
               ST7C_4_0,
               ST80_4_0,
               ST84_4_0,
               ST88_4_0,
               ST8C_4_0,
               ST90_4_0,
               ST94_4_0,
               ST98_4_0,
               ST9C_4_0,
               STA0_4_0,
               STA4_4_0,
               STA8_4_0,
               STAC_4_0,
               STB0_4_0,
               STB4_4_0,
               STB8_4_0,
               STBC_4_0,
               STC0_4_0,
               STC4_4_0,
               STC8_4_0,
               STCC_4_0,
               STD0_4_0,
               STD4_4_0,
               STD8_4_0,
               STDC_4_0,
               STE0_4_0,
               STE4_4_0,
               STE8_4_0,
               STEC_4_0,
               STF0_4_0,
               STF4_4_0,
               STF8_4_0);
      BYTE3(v133) = v122;
      if ( v122 )
      {
        if ( sub_424B60(v126, &p->pkt.data_len, v155) )
        {
          if ( a16 )
            *(_WORD *)a16 = p->pkt.data_len;
          if ( p->pkt.data_len )
          {
            v123 = sub_4085D0(v126 + 8, v131);
            sub_407C90(v123, (int)&forbid_this_client);
          }
          v157 = 1;
          LOBYTE(v127) = 1;
          sub_4078E0((int)&forbid_this_client);
          LOBYTE(v127) = 0;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
          v127 = -1;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
          result = v157;
        }
        else
        {
          if ( a16 )
            *(_WORD *)a16 = 4;
          v156 = 0;
          LOBYTE(v127) = 1;
          sub_4078E0((int)&forbid_this_client);
          LOBYTE(v127) = 0;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
          v127 = -1;
          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
          result = v156;
        }
      }
      else
      {
        if ( a16 )
          *(_WORD *)a16 = 4;
        p->data = 0;
        LOBYTE(v127) = 1;
        sub_4078E0((int)&forbid_this_client);
        LOBYTE(v127) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        v127 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        result = p->data;
      }
    }
  }
  else
  {
    if ( a16 )
      *(_WORD *)a16 = 2;
    v132 = 0;
    LOBYTE(v127) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    v127 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    result = v132;
  }
  return result;
}

//----- (00428980) --------------------------------------------------------
char __thiscall sub_428980(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
  char ST08_1_0; // ST08_1@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  char result; // al@4
  char v17; // ST04_1@5
  int v18; // ST08_4@5
  int v19; // ST0C_4@5
  int v20; // ST10_4@5
  int v21; // ST14_4@5
  int v22; // ST18_4@5
  int v23; // ST1C_4@5
  signed int v24; // eax@5
  int v25; // ST20_4@7
  unsigned __int8 v26; // al@7
  int v27; // [sp+14h] [bp-38h]@1
  signed int v28; // [sp+48h] [bp-4h]@1
  unsigned __int16 v29; // [sp+34h] [bp-18h]@5
  char *v30; // [sp+24h] [bp-28h]@5
  int v31; // [sp+10h] [bp-3Ch]@5
  signed int v32; // [sp+Ch] [bp-40h]@5
  unsigned int v33; // [sp+38h] [bp-14h]@5
  char *v34; // [sp+20h] [bp-2Ch]@7
  int v35; // [sp+8h] [bp-44h]@7
  unsigned __int8 v36; // [sp+7h] [bp-45h]@7
  char v37; // [sp+1Fh] [bp-2Dh]@11
  int v38; // [sp+2Ch] [bp-20h]@13
  char v39; // [sp+1Eh] [bp-2Eh]@16
  __int16 v40; // [sp+30h] [bp-1Ch]@17
  char v41; // [sp+1Dh] [bp-2Fh]@20
  char v42; // [sp+1Ch] [bp-30h]@24
  char v43; // [sp+1Bh] [bp-31h]@26
  char v44; // [sp+1Ah] [bp-32h]@27

  v27 = this;
  v28 = 0;
  if ( !sub_420830(this) )
  {
    if ( a9 )
      *(_WORD *)a9 = 4;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    return 0;
  }
  v29 = 0;
  v30 = &ST08_1_0;
  v31 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v24 = sub_41ACD0(v27, ST08_1_0, ST0C_4_0, ST10_4_0, ST14_4_0, ST18_4_0, ST1C_4_0, ST20_4_0);
  v32 = v24;
  v33 = v24;
  if ( v24 >= 0 )
    v29 = *(_WORD *)(sub_4085D0(v27 + 8, v33) + 56);
  v25 = a9;
  v34 = &v17;
  v35 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v26 = sub_425E20(v17, v18, v19, v20, v21, v22, v23, v25);
  v36 = v26;
  if ( !v26 )
  {
    if ( !sub_420800(v27) )
    {
      if ( a9 )
        *(_WORD *)a9 = 4;
    }
    v37 = 0;
    v28 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    return v37;
  }
  if ( (signed int)v29 <= 0 )
    goto LABEL_30;
  if ( !(unsigned __int8)sub_422190(v27, v29, (int)&v38) )
  {
    if ( a9 )
      *(_WORD *)a9 = 4;
    v39 = 0;
    v28 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    return v39;
  }
  if ( sub_424B60(v27, &v40, v38) )
  {
LABEL_30:
    if ( sub_420800(v27) )
    {
      if ( a9 )
      {
        v43 = 0;
        v28 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        result = v43;
      }
      else
      {
        v44 = 1;
        v28 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        result = v44;
      }
    }
    else
    {
      if ( a9 )
        *(_WORD *)a9 = 4;
      v42 = 0;
      v28 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      result = v42;
    }
  }
  else
  {
    if ( a9 )
      *(_WORD *)a9 = v40;
    v41 = 0;
    v28 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    result = v41;
  }
  return result;
}

//----- (00428BB0) --------------------------------------------------------
char __thiscall sub_428BB0(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, char a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  char ST1C_1_0; // ST1C_1@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  char ST38_1_0; // ST38_1@0
  int ST3C_4_0; // ST3C_4@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  char result; // al@4
  int v42; // ST3C_4@5
  int v43; // ST40_4@5
  int v44; // ST44_4@5
  int v45; // ST48_4@5
  int v46; // ST4C_4@5
  int v47; // ST50_4@5
  int v48; // ST54_4@5
  int v49; // ST54_4@5
  int v50; // eax@5
  int v51; // eax@5
  char v52; // ST00_1@5
  int v53; // ST20_4@5
  int v54; // ST34_4@5
  char v55; // al@5
  signed int v56; // eax@10
  int v57; // eax@11
  int v58; // [sp+24h] [bp-40h]@1
  signed int v59; // [sp+60h] [bp-4h]@1
  char *v60; // [sp+40h] [bp-24h]@5
  int v61; // [sp+20h] [bp-44h]@5
  int v62; // [sp+1Ch] [bp-48h]@5
  int *v63; // [sp+3Ch] [bp-28h]@5
  int v64; // [sp+18h] [bp-4Ch]@5
  int v65; // [sp+14h] [bp-50h]@5
  int *v66; // [sp+38h] [bp-2Ch]@5
  int v67; // [sp+10h] [bp-54h]@5
  char v68; // [sp+Fh] [bp-55h]@5
  char v69; // [sp+37h] [bp-2Dh]@9
  int *v70; // [sp+30h] [bp-34h]@10
  int v71; // [sp+8h] [bp-5Ch]@10
  signed int v72; // [sp+4h] [bp-60h]@10
  unsigned int v73; // [sp+50h] [bp-14h]@10
  int v74; // [sp+48h] [bp-1Ch]@11
  char v75; // [sp+2Fh] [bp-35h]@14
  __int16 v76; // [sp+4Ch] [bp-18h]@15
  char v77; // [sp+2Eh] [bp-36h]@18
  char v78; // [sp+2Dh] [bp-37h]@22
  char v79; // [sp+2Ch] [bp-38h]@24
  char v80; // [sp+2Bh] [bp-39h]@25

  v58 = this;
  v59 = 2;
  if ( !sub_420830(this) )
  {
    if ( a23 )
      *(_WORD *)a23 = 4;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return 0;
  }
  v49 = a23;
  v60 = &ST38_1_0;
  v50 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
  v61 = v50;
  v62 = v50;
  LOBYTE(v59) = 3;
  v63 = &ST24_4_0;
  v51 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  v64 = v51;
  v65 = v51;
  LOBYTE(v59) = 4;
  v66 = &ST04_4_0;
  v67 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  LOBYTE(v59) = 2;
  v55 = sub_425FE0(
          v58,
          v52,
          ST04_4_0,
          ST08_4_0,
          ST0C_4_0,
          ST10_4_0,
          ST14_4_0,
          ST18_4_0,
          ST1C_1_0,
          v53,
          ST24_4_0,
          ST28_4_0,
          ST2C_4_0,
          ST30_4_0,
          v54,
          ST38_1_0,
          ST3C_4_0,
          ST40_4_0,
          ST44_4_0,
          ST48_4_0,
          ST4C_4_0,
          ST50_4_0,
          v48);
  v68 = v55;
  if ( !(unsigned __int8)v55 )
  {
    if ( !sub_420800(v58) )
    {
      if ( a23 )
        *(_WORD *)a23 = 4;
    }
    v69 = 0;
    LOBYTE(v59) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(v59) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    v59 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return v69;
  }
  v70 = &ST3C_4_0;
  v71 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v56 = sub_41ACD0(v58, v42, v43, v44, v45, v46, v47, v48);
  v72 = v56;
  v73 = v56;
  if ( v56 < 0 )
    goto LABEL_28;
  v57 = sub_4085D0(v58 + 8, v73);
  if ( !(unsigned __int8)sub_422190(v58, *(_WORD *)(v57 + 56), (int)&v74) )
  {
    if ( a23 )
      *(_WORD *)a23 = 4;
    v75 = 0;
    LOBYTE(v59) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(v59) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    v59 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    return v75;
  }
  if ( sub_424B60(v58, &v76, v74) )
  {
LABEL_28:
    if ( sub_420800(v58) )
    {
      if ( a23 )
      {
        v79 = 0;
        LOBYTE(v59) = 1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        LOBYTE(v59) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        v59 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
        result = v79;
      }
      else
      {
        v80 = 1;
        LOBYTE(v59) = 1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        LOBYTE(v59) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        v59 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
        result = v80;
      }
    }
    else
    {
      if ( a23 )
        *(_WORD *)a23 = 4;
      v78 = 0;
      LOBYTE(v59) = 1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      LOBYTE(v59) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
      v59 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
      result = v78;
    }
  }
  else
  {
    if ( a23 )
      *(_WORD *)a23 = v76;
    v77 = 0;
    LOBYTE(v59) = 1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    LOBYTE(v59) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    v59 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a16);
    result = v77;
  }
  return result;
}

//----- (00428ED0) --------------------------------------------------------
signed int __thiscall pollIncomingEvents(int this, int a2)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  int ST18_4_0; // ST18_4@0
  int ST1C_4_0; // ST1C_4@0
  int ST20_4_0; // ST20_4@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  int ST3C_4_0; // ST3C_4@0
  int ST40_4_0; // ST40_4@0
  int ST44_4_0; // ST44_4@0
  int ST48_4_0; // ST48_4@0
  int ST4C_4_0; // ST4C_4@0
  int ST50_4_0; // ST50_4@0
  int ST54_4_0; // ST54_4@0
  int ST58_4_0; // ST58_4@0
  int ST68_4_0; // ST68_4@0
  int ST6C_4_0; // ST6C_4@0
  int ST70_4_0; // ST70_4@0
  unsigned __int8 v27; // of@1
  int v28; // edx@1
  int v29; // ST64_4@1
  int v31; // ST5C_4@12
  int v32; // ST60_4@12
  int v33; // ST58_4@22
  int v34; // ST5C_4@22
  int v35; // ST60_4@22
  int v36; // ST44_4@24
  int v37; // ST4C_4@24
  int v38; // ST50_4@24
  int v39; // ST54_4@24
  int v40; // ST58_4@24
  int v41; // ST5C_4@24
  int v42; // ST60_4@24
  int v43; // ST54_4@54
  int v44; // ST58_4@54
  int v45; // ST5C_4@54
  int v46; // ST60_4@54
  int v47; // ST5C_4@75
  int v48; // ST60_4@75
  int v49; // ST50_4@111
  int v50; // ST54_4@111
  int v51; // ST58_4@111
  int v52; // ST5C_4@111
  int v53; // ST60_4@111
  int v54; // ST64_4@111
  __time64_t v55; // qax@1
  signed int v56; // eax@24
  int v57; // eax@27
  int v58; // eax@28
  int v59; // eax@30
  int v60; // eax@31
  int v61; // eax@33
  int v62; // eax@34
  int v63; // eax@36
  int v64; // eax@37
  int v65; // eax@39
  int v66; // eax@40
  int v67; // ST64_4@44
  int v68; // ST68_4@44
  int v69; // ST6C_4@44
  int v70; // ST70_4@44
  int v71; // eax@46
  int v72; // edx@46
  int v73; // ST64_4@49
  int v74; // ST68_4@49
  int v75; // ST6C_4@49
  int v76; // ST70_4@49
  int v77; // eax@51
  int v78; // edx@51
  signed int v79; // eax@64
  signed int v80; // eax@77
  int v81; // ST64_4@111
  int v82; // ST68_4@111
  int v83; // ST6C_4@111
  int v84; // ST70_4@111
  signed int v85; // eax@113
  int v86; // eax@114
  int v87; // eax@114
  int v88; // edx@114
  int v89; // eax@115
  int v90; // eax@115
  int v91; // eax@115
  int v92; // eax@115
  int v93; // edx@115
  signed int v94; // eax@119
  int  s; // [sp+38Ch] [bp+0h]@1
  unsigned int v96; // [sp+350h] [bp-3Ch]@1
  int v97; // [sp+8Ch] [bp-300h]@1
  int v98; // [sp+37Ch] [bp-10h]@1
  int v99; // [sp+84h] [bp-308h]@1
  int v100; // [sp+88h] [bp-304h]@1
  unsigned __int16 v101; // [sp+354h] [bp-38h]@5
  signed int v102; // [sp+388h] [bp-4h]@5
  unsigned __int16 v103; // [sp+356h] [bp-36h]@5
  int v104; // [sp+35Ch] [bp-30h]@5
  signed int v105; // [sp+378h] [bp-14h]@5
  signed int v106; // [sp+120h] [bp-26Ch]@6
  char v107; // [sp+2F0h] [bp-9Ch]@12
  int v108; // [sp+360h] [bp-2Ch]@12
  int *v109; // [sp+118h] [bp-274h]@14
  int v110; // [sp+80h] [bp-30Ch]@14
  char v111; // [sp+288h] [bp-104h]@22
  _BYTE v112[5]; // [sp+2EBh] [bp-A1h]@22
  int *v113; // [sp+110h] [bp-27Ch]@24
  char v114; // [sp+294h] [bp-F8h]@24
  int v115; // [sp+7Ch] [bp-310h]@24
  signed int v116; // [sp+78h] [bp-314h]@24
  int v117; // [sp+74h] [bp-318h]@25
  char v118; // [sp+2B0h] [bp-DCh]@27
  int *v119; // [sp+10Ch] [bp-280h]@41
  int v120; // [sp+70h] [bp-31Ch]@41
  char v121; // [sp+250h] [bp-13Ch]@44
  char v122; // [sp+26Ch] [bp-120h]@44
  int *v123; // [sp+104h] [bp-288h]@46
  int v124; // [sp+6Ch] [bp-320h]@46
  int v125; // [sp+68h] [bp-324h]@46
  int *v126; // [sp+100h] [bp-28Ch]@46
  int v127; // [sp+64h] [bp-328h]@46
  char v128; // [sp+214h] [bp-178h]@49
  char v129; // [sp+230h] [bp-15Ch]@49
  char v130; // [sp+24Fh] [bp-13Dh]@49
  int *v131; // [sp+F8h] [bp-294h]@51
  int v132; // [sp+60h] [bp-32Ch]@51
  int v133; // [sp+5Ch] [bp-330h]@51
  int *v134; // [sp+F4h] [bp-298h]@51
  int v135; // [sp+58h] [bp-334h]@51
  char v136; // [sp+1E0h] [bp-1ACh]@54
  int v137; // [sp+1FCh] [bp-190h]@54
  int v138; // [sp+204h] [bp-188h]@54
  int v139; // [sp+20Ch] [bp-180h]@56
  signed int v140; // [sp+208h] [bp-184h]@56
  unsigned __int8 v141; // [sp+203h] [bp-189h]@56
  int *v142; // [sp+ECh] [bp-2A0h]@64
  int v143; // [sp+54h] [bp-338h]@64
  signed int v144; // [sp+50h] [bp-33Ch]@64
  unsigned int v145; // [sp+210h] [bp-17Ch]@64
  int *v146; // [sp+E8h] [bp-2A4h]@71
  int miif; // [sp+4Ch] [bp-340h]@71
  char v148; // [sp+1C0h] [bp-1CCh]@75
  int *forbid_this_client; // [sp+E0h] [bp-2ACh]@77
  int v150; // [sp+48h] [bp-344h]@77
  signed int v151; // [sp+44h] [bp-348h]@77
  unsigned int p->pkt.type; // [sp+1DCh] [bp-1B0h]@77
  int *p->data; // [sp+DCh] [bp-2B0h]@78
  int p->pkt.data_len; // [sp+40h] [bp-34Ch]@78
  int *v155; // [sp+D8h] [bp-2B4h]@82
  int v156; // [sp+3Ch] [bp-350h]@82
  char v157; // [sp+1A4h] [bp-1E8h]@101
  int *v158; // [sp+C4h] [bp-2C8h]@103
  int v159; // [sp+38h] [bp-354h]@103
  int v160; // [sp+184h] [bp-208h]@106
  __int16 v161; // [sp+1A0h] [bp-1ECh]@106
  int *v162; // [sp+BCh] [bp-2D0h]@108
  int total_sent; // [sp+34h] [bp-358h]@108
  char v164; // [sp+128h] [bp-264h]@111
  char v165; // [sp+168h] [bp-224h]@111
  char data_arrived; // [sp+144h] [bp-248h]@111
  int v167; // [sp+160h] [bp-22Ch]@111
  int *v168; // [sp+B4h] [bp-2D8h]@113
  int v169; // [sp+30h] [bp-35Ch]@113
  signed int activity_time; // [sp+2Ch] [bp-360h]@113
  unsigned int v171; // [sp+164h] [bp-228h]@113
  int *v172; // [sp+B0h] [bp-2DCh]@114
  int v173; // [sp+28h] [bp-364h]@114
  int v174; // [sp+24h] [bp-368h]@114
  int *v175; // [sp+ACh] [bp-2E0h]@114
  int v176; // [sp+20h] [bp-36Ch]@114
  int v177; // [sp+1Ch] [bp-370h]@114
  int *v178; // [sp+A8h] [bp-2E4h]@114
  int v179; // [sp+18h] [bp-374h]@114
  int *v180; // [sp+A4h] [bp-2E8h]@115
  int v181; // [sp+14h] [bp-378h]@115
  int v182; // [sp+10h] [bp-37Ch]@115
  int *v183; // [sp+A0h] [bp-2ECh]@115
  int v184; // [sp+Ch] [bp-380h]@115
  int v185; // [sp+8h] [bp-384h]@115
  int *v186; // [sp+9Ch] [bp-2F0h]@115
  int v187; // [sp+4h] [bp-388h]@115
  signed int v188; // [sp+124h] [bp-268h]@119
  int v189; // [sp+94h] [bp-2F8h]@121
  int v190; // [sp+98h] [bp-2F4h]@121
  int v191; // [sp+0h] [bp-38Ch]@122
  signed int v192; // [sp+90h] [bp-2FCh]@125

  v96 = (unsigned int)& s ^ dword_43901C;
  v29 = (unsigned int)& s ^ dword_43901C;
  v97 = this;
  v98 = sub_407090(this);
  setNetworkTimeout(v97, a2);
  v55 = sub_41AB10(0);
  v27 = __SETO__(*((_DWORD *)&v55 + 1), ((_DWORD)v55 < *(_DWORD *)(v97 + 776)) + *(_DWORD *)(v97 + 780));
  v28 = *((_DWORD *)&v55 + 1) - (((_DWORD)v55 < *(_DWORD *)(v97 + 776)) + *(_DWORD *)(v97 + 780));
  v99 = (_DWORD)v55 - *(_DWORD *)(v97 + 776);
  v100 = v28;
  if ( v28 >= 0 )
  {
    if ( !((unsigned __int8)(v28 < 0 ^ v27) | v28 == 0) || (unsigned int)v99 > 0x3C )
      sub_41DDD0(v97);
  }
  sub_42C080((int)&v101);
  v102 = 0;
  v101 = 0;
  v103 = 0;
  v104 = 0;
  v105 = sub_422C50(v97, (int)&v101);
  setNetworkTimeout(v97, v98);
  if ( v105 != 1 )
  {
    v106 = v105;
    v102 = -1;
    naticq_event();
    return v106;
  }
  if ( v101 == 21 && v103 == 3 )
  {
    sub_421840(v97, (int)&v101);
    goto LABEL_117;
  }
  if ( v101 == 4 && v103 == 7 )
  {
    sub_406C80();
    LOBYTE(v102) = 1;
    if ( !(unsigned __int8)sub_427B20(v97, &v107, (int)&v108) )
    {
      LOBYTE(v102) = 0;
      sub_4070B0((int)&v107);
      v102 = -1;
      naticq_event();
      return -2;
    }
    v109 = &ST04_4_0;
    v110 = sub_407FF0((int)&ST04_4_0, (int)&v107);
    (*(int (__thiscall **)(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int))(*(_DWORD *)v97 + 12))(
      v97,
      ST04_4_0,
      ST08_4_0,
      ST0C_4_0,
      ST10_4_0,
      ST14_4_0,
      ST18_4_0,
      ST1C_4_0,
      ST20_4_0,
      ST24_4_0,
      ST28_4_0,
      ST2C_4_0,
      ST30_4_0,
      ST34_4_0,
      ST38_4_0,
      ST3C_4_0,
      ST40_4_0,
      ST44_4_0,
      ST48_4_0,
      ST4C_4_0,
      ST50_4_0,
      ST54_4_0,
      ST58_4_0,
      v31,
      v32);
    LOBYTE(v102) = 0;
    sub_4070B0((int)&v107);
    goto LABEL_117;
  }
  if ( v101 == 4 && v103 == 12 )
  {
    if ( !(unsigned __int8)sub_41D270(v97, (int)&v108) )
    {
      v102 = -1;
      naticq_event();
      return -2;
    }
    goto LABEL_117;
  }
  if ( v101 == 4 && v103 == 11 )
  {
    sub_406C80();
    LOBYTE(v102) = 2;
    if ( sub_41D390(v97, &v111, (int)v112, (int)&v108) )
    {
      v113 = &ST48_4_0;
      v115 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v114);
      v56 = sub_41ACD0(v97, ST4C_4_0, ST50_4_0, ST54_4_0, v33, v34, v35, v29);
      v116 = v56;
      *(_DWORD *)&v112[1] = v56;
      if ( v56 >= 0 )
      {
        v117 = (unsigned __int8)v112 - 232;
        if ( (unsigned int)(unsigned __int8)v112 - 232 <= 4 )
        {
          switch ( v117 )
          {
            case 0:
              v57 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
              if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(v57 + 228, &v118) )
              {
                v58 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v58 + 228);
              }
              break;
            case 1:
              v59 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
              if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(v59 + 256, &v118) )
              {
                v60 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v60 + 256);
              }
              break;
            case 2:
              v61 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
              if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(v61 + 284, &v118) )
              {
                v62 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v62 + 284);
              }
              break;
            case 3:
              v63 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
              if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(v63 + 312, &v118) )
              {
                v64 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v64 + 312);
              }
              break;
            case 4:
              v65 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
              if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(v65 + 340, &v118) )
              {
                v66 = sub_4085D0(v97 + 8, *(unsigned int *)&v112[1]);
                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v66 + 340);
              }
              break;
          }
        }
      }
      v119 = &ST04_4_0;
      v120 = sub_407FF0((int)&ST04_4_0, (int)&v111);
      (*(int (__thiscall **)(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int))(*(_DWORD *)v97 + 48))(
        v97,
        ST04_4_0,
        ST08_4_0,
        ST0C_4_0,
        ST10_4_0,
        ST14_4_0,
        ST18_4_0,
        ST1C_4_0,
        ST20_4_0,
        ST24_4_0,
        ST28_4_0,
        ST2C_4_0,
        ST30_4_0,
        ST34_4_0,
        ST38_4_0,
        ST3C_4_0,
        ST40_4_0,
        v36,
        ST48_4_0,
        v37,
        v38,
        v39,
        v40,
        v41,
        v42);
      LOBYTE(v102) = 0;
      sub_4070B0((int)&v111);
      goto LABEL_117;
    }
    LOBYTE(v102) = 0;
    sub_4070B0((int)&v111);
    goto LABEL_111;
  }
  if ( v101 == 19 && v103 == 25 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v121,
      v29,
      ST68_4_0,
      ST6C_4_0,
      ST70_4_0);
    LOBYTE(v102) = 3;
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v122,
      v67,
      v68,
      v69,
      v70);
    LOBYTE(v102) = 4;
    if ( !(unsigned __int8)sub_41DA00(v97, (int)&v121, (int)&v122, (int)&v108) )
    {
      LOBYTE(v102) = 3;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v122);
      LOBYTE(v102) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v121);
      v102 = -1;
      naticq_event();
      return -2;
    }
    v123 = &ST48_4_0;
    v71 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v122);
    v124 = v71;
    v125 = v71;
    LOBYTE(v102) = 5;
    v126 = &ST48_4_0;
    v127 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v121);
    v72 = *(_DWORD *)v97;
    LOBYTE(v102) = 4;
    (*(int (__thiscall **)(int))(v72 + 16))(v97);
    LOBYTE(v102) = 3;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v122);
    LOBYTE(v102) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v121);
    goto LABEL_117;
  }
  if ( v101 == 19 && v103 == 27 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v128,
      v29,
      ST68_4_0,
      ST6C_4_0,
      ST70_4_0);
    LOBYTE(v102) = 6;
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v129,
      v73,
      v74,
      v75,
      v76);
    LOBYTE(v102) = 7;
    if ( !(unsigned __int8)sub_41D900(v97, (int)&v128, (int)&v129, (int)&v130, (int)&v108) )
    {
      LOBYTE(v102) = 6;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v129);
      LOBYTE(v102) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v128);
      v102 = -1;
      naticq_event();
      return -2;
    }
    v131 = &ST44_4_0;
    v77 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v129);
    v132 = v77;
    v133 = v77;
    LOBYTE(v102) = 8;
    v134 = &ST48_4_0;
    v135 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v128);
    v78 = *(_DWORD *)v97;
    LOBYTE(v102) = 7;
    (*(int (__thiscall **)(int))(v78 + 20))(v97);
    LOBYTE(v102) = 6;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v129);
    LOBYTE(v102) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v128);
    goto LABEL_117;
  }
  if ( v101 == 3 && v103 == 11 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v136,
      v29,
      ST68_4_0,
      ST6C_4_0,
      ST70_4_0);
    LOBYTE(v102) = 9;
    v137 = 0;
    if ( !(unsigned __int8)sub_41DF60(v97, (int)&v136, (int)&v138, (int)&v108, (int)&v137) )
    {
      LOBYTE(v102) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v136);
      v102 = -1;
      naticq_event();
      return -2;
    }
    v139 = v138 & 0xFFFF0000;
    v140 = (unsigned __int16)v138;
    v141 = 0;
    if ( v138 & 0x100 )
    {
      v141 = 1;
      v140 &= 0xFFFFF0FFu;
    }
    if ( v140 == 5 )
      v140 = 4;
    if ( v140 == 17 )
      v140 = 16;
    if ( v140 == 19 )
      v140 = 2;
    v142 = &ST48_4_0;
    v143 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v136);
    v79 = sub_41ACD0(v97, ST48_4_0, ST4C_4_0, ST50_4_0, v43, v44, v45, v46);
    v144 = v79;
    v145 = v79;
    if ( v79 < 0
      || *(_DWORD *)(sub_4085D0(v97 + 8, v145) + 156) != v139
      || *(_DWORD *)(sub_4085D0(v97 + 8, v145) + 152) != v140
      || *(_BYTE *)(sub_4085D0(v97 + 8, v145) + 160) != v141
      || *(_DWORD *)(sub_4085D0(v97 + 8, v145) + 164) != v137 )
    {
      if ( (signed int)v145 >= 0 )
      {
        *(_DWORD *)(sub_4085D0(v97 + 8, v145) + 156) = v139;
        *(_DWORD *)(sub_4085D0(v97 + 8, v145) + 152) = v140;
        *(_BYTE *)(sub_4085D0(v97 + 8, v145) + 160) = v141;
        *(_DWORD *)(sub_4085D0(v97 + 8, v145) + 164) = v137;
      }
      v146 = &ST38_4_0;
      miif = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v136);
      (*(int (__thiscall **)(int))(*(_DWORD *)v97 + 24))(v97);
    }
    LOBYTE(v102) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v136);
    goto LABEL_117;
  }
  if ( v101 == 3 && v103 == 12 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v148,
      v29,
      ST68_4_0,
      ST6C_4_0,
      ST70_4_0);
    LOBYTE(v102) = 10;
    if ( !(unsigned __int8)sub_41D880(v97, (int)&v148, (int)&v108) )
    {
      LOBYTE(v102) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v148);
      v102 = -1;
      naticq_event();
      return -2;
    }
    forbid_this_client = &ST48_4_0;
    v150 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v148);
    v80 = sub_41ACD0(v97, ST48_4_0, ST4C_4_0, ST50_4_0, ST54_4_0, ST58_4_0, v47, v48);
    v151 = v80;
    p->pkt.type = v80;
    if ( v80 >= 0 )
    {
      if ( *(_DWORD *)(sub_4085D0(v97 + 8, p->pkt.type) + 156)
        || *(_DWORD *)(sub_4085D0(v97 + 8, p->pkt.type) + 152) != -1
        || *(_BYTE *)(sub_4085D0(v97 + 8, p->pkt.type) + 160) )
      {
        *(_DWORD *)(sub_4085D0(v97 + 8, p->pkt.type) + 156) = 0;
        *(_DWORD *)(sub_4085D0(v97 + 8, p->pkt.type) + 152) = -1;
        *(_BYTE *)(sub_4085D0(v97 + 8, p->pkt.type) + 160) = 0;
        *(_BYTE *)(sub_4085D0(v97 + 8, p->pkt.type) + 225) = 0;
        *(_BYTE *)(sub_4085D0(v97 + 8, p->pkt.type) + 226) = 0;
        v155 = &ST38_4_0;
        v156 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v148);
        (*(int (__thiscall **)(int))(*(_DWORD *)v97 + 24))(v97);
      }
    }
    else
    {
      p->data = &ST38_4_0;
      p->pkt.data_len = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v148);
      (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v97 + 24))(v97);
    }
    LOBYTE(v102) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v148);
    goto LABEL_117;
  }
  if ( v101 == 19 && v103 == 8 )
  {
    if ( !(unsigned __int8)sub_4228D0(v97, (int)&v108) )
    {
      v102 = -1;
      naticq_event();
      return -2;
    }
    (*(int (__thiscall **)(int))(*(_DWORD *)v97 + 28))(v97);
    goto LABEL_117;
  }
  if ( v101 == 19 && v103 == 9 )
  {
    if ( !(unsigned __int8)sub_424FE0(v97, (int)&v108) )
    {
      v102 = -1;
      naticq_event();
      return -2;
    }
    (*(int (__thiscall **)(int))(*(_DWORD *)v97 + 28))(v97);
    goto LABEL_117;
  }
  if ( v101 == 19 && v103 == 10 )
  {
    if ( !(unsigned __int8)sub_422650(v97, (int)&v108) )
    {
      v102 = -1;
      naticq_event();
      return -2;
    }
    (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v97 + 28))(v97);
    goto LABEL_117;
  }
  if ( v101 == 19 && v103 == 28 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v157,
      v29,
      ST68_4_0,
      ST6C_4_0,
      ST70_4_0);
    LOBYTE(v102) = 11;
    if ( !(unsigned __int8)sub_41D810(v97, (int)&v157, (int)&v108) )
    {
      LOBYTE(v102) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v157);
      v102 = -1;
      naticq_event();
      return -2;
    }
    v158 = &ST48_4_0;
    v159 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v157);
    (*(int (__thiscall **)(int))(*(_DWORD *)v97 + 32))(v97);
    LOBYTE(v102) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v157);
    goto LABEL_117;
  }
  if ( v101 == 4 && v103 == 20 )
  {
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v160,
      v29,
      ST68_4_0,
      ST6C_4_0,
      ST70_4_0);
    LOBYTE(v102) = 12;
    if ( !(unsigned __int8)sub_41DAF0(v97, (int)&v160, &v161, (int)&v108) )
    {
      LOBYTE(v102) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v160);
      v102 = -1;
      naticq_event();
      return -2;
    }
    v162 = &ST44_4_0;
    total_sent = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v160);
    (*(int (__thiscall **)(int))(*(_DWORD *)v97 + 8))(v97);
    LOBYTE(v102) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v160);
    goto LABEL_117;
  }
  if ( v101 == 4 && v103 == 11 )
  {
LABEL_111:
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v164,
      v29,
      ST68_4_0,
      ST6C_4_0,
      ST70_4_0);
    LOBYTE(v102) = 13;
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &v165,
      v81,
      v82,
      v83,
      v84);
    LOBYTE(v102) = 14;
    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
      &data_arrived,
      v54,
      v82,
      v83,
      v84);
    LOBYTE(v102) = 15;
    if ( !(unsigned __int8)sub_41D640(v97, (int)&v164, (int)&v167, (int)&v165, (int)&data_arrived, (int)&v108) )
    {
      LOBYTE(v102) = 14;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&data_arrived);
      LOBYTE(v102) = 13;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v165);
      LOBYTE(v102) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v164);
      v102 = -1;
      naticq_event();
      return -2;
    }
    v168 = &ST48_4_0;
    v169 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v164);
    v85 = sub_41ACD0(v97, ST4C_4_0, v49, v50, v51, v52, v53, v54);
    activity_time = v85;
    v171 = v85;
    if ( v85 >= 0 )
    {
      *(_DWORD *)(sub_4085D0(v97 + 8, v171) + 164) = v167;
      v89 = sub_4085D0(v97 + 8, v171);
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v89 + 168);
      v90 = sub_4085D0(v97 + 8, v171);
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v90 + 196);
      v180 = &ST48_4_0;
      v91 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&data_arrived);
      v181 = v91;
      v182 = v91;
      LOBYTE(v102) = 18;
      v183 = &ST48_4_0;
      v92 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v165);
      v184 = v92;
      v185 = v92;
      LOBYTE(v102) = 19;
      v186 = &ST44_4_0;
      v187 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v164);
      v93 = *(_DWORD *)v97;
      LOBYTE(v102) = 15;
      (*(int (__thiscall **)(int))(v93 + 40))(v97);
    }
    else
    {
      v172 = &ST4C_4_0;
      v86 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&data_arrived);
      v173 = v86;
      v174 = v86;
      LOBYTE(v102) = 16;
      v175 = &ST48_4_0;
      v87 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v165);
      v176 = v87;
      v177 = v87;
      LOBYTE(v102) = 17;
      v178 = &ST44_4_0;
      v179 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&v164);
      v88 = *(_DWORD *)v97;
      LOBYTE(v102) = 15;
      (*(int (__thiscall **)(int))(v88 + 40))(v97);
    }
    LOBYTE(v102) = 14;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&data_arrived);
    LOBYTE(v102) = 13;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v165);
    LOBYTE(v102) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v164);
  }
LABEL_117:
  if ( *(_DWORD *)(v97 + 724) )
  {
    if ( *(_DWORD *)(v97 + 724) != v97 )
    {
      v94 = pollIncomingEvents(a2);
      v188 = v94;
      if ( v94 != 1 )
      {
        if ( v188 != -2 )
        {
          
          doDisconnect(*(_DWORD *)(v97 + 724));
          v189 = *(_DWORD *)(v97 + 724);
          v190 = v189;
          if ( v189 )
            v191 = (**(int (__thiscall ***)(_DWORD, _DWORD))v190)(v190, 1);
          else
            v191 = 0;
          *(_DWORD *)(v97 + 724) = 0;
        }
      }
    }
  }
  v192 = 1;
  v102 = -1;
  naticq_event();
  return v192;
}

//----- (0042A260) --------------------------------------------------------
char __thiscall sub_42A260(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8, char a9, int a10, int a11, int a12, int a13, int a14, int a15, int a16)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  int ST14_4_0; // ST14_4@0
  char ST20_1_0; // ST20_1@0
  int ST24_4_0; // ST24_4@0
  int ST28_4_0; // ST28_4@0
  int ST2C_4_0; // ST2C_4@0
  int ST30_4_0; // ST30_4@0
  int ST34_4_0; // ST34_4@0
  int ST38_4_0; // ST38_4@0
  char result; // al@4
  char v29; // ST1C_1@5
  int v30; // ST20_4@5
  int v31; // ST24_4@5
  int v32; // ST28_4@5
  int v33; // ST2C_4@5
  int v34; // ST30_4@5
  int v35; // ST34_4@5
  int v36; // ST20_4@7
  int v37; // ST24_4@7
  int v38; // ST28_4@7
  int v39; // ST2C_4@7
  int v40; // ST30_4@7
  int v41; // ST34_4@7
  int v42; // ST38_4@7
  signed int v43; // eax@5
  int v44; // ST38_4@7
  int v45; // eax@7
  char v46; // ST00_1@7
  int v47; // ST18_4@7
  char v48; // al@7
  signed int v49; // eax@12
  int v50; // eax@14
  int v51; // [sp+24h] [bp-48h]@1
  signed int v52; // [sp+68h] [bp-4h]@1
  unsigned __int16 v53; // [sp+50h] [bp-1Ch]@5
  char *v54; // [sp+40h] [bp-2Ch]@5
  int v55; // [sp+20h] [bp-4Ch]@5
  signed int v56; // [sp+1Ch] [bp-50h]@5
  unsigned int v57; // [sp+58h] [bp-14h]@5
  char *v58; // [sp+3Ch] [bp-30h]@7
  int v59; // [sp+18h] [bp-54h]@7
  int v60; // [sp+14h] [bp-58h]@7
  int *v61; // [sp+38h] [bp-34h]@7
  int v62; // [sp+10h] [bp-5Ch]@7
  char v63; // [sp+Fh] [bp-5Dh]@7
  char v64; // [sp+37h] [bp-35h]@11
  unsigned __int16 v65; // [sp+54h] [bp-18h]@12
  char *v66; // [sp+30h] [bp-3Ch]@12
  int v67; // [sp+8h] [bp-64h]@12
  signed int v68; // [sp+4h] [bp-68h]@12
  int v69; // [sp+48h] [bp-24h]@14
  char v70; // [sp+2Fh] [bp-3Dh]@17
  __int16 v71; // [sp+4Ch] [bp-20h]@18
  char v72; // [sp+2Eh] [bp-3Eh]@21
  char v73; // [sp+2Dh] [bp-3Fh]@25
  char v74; // [sp+2Ch] [bp-40h]@27
  char v75; // [sp+2Bh] [bp-41h]@28

  v51 = this;
  v52 = 1;
  if ( !sub_420830(this) )
  {
    if ( a16 )
      *(_WORD *)a16 = 4;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    return 0;
  }
  v53 = 0;
  v54 = &ST20_1_0;
  v55 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v43 = sub_41ACD0(v51, ST20_1_0, ST24_4_0, ST28_4_0, ST2C_4_0, ST30_4_0, ST34_4_0, ST38_4_0);
  v56 = v43;
  v57 = v43;
  if ( v43 >= 0 )
    v53 = *(_WORD *)(sub_4085D0(v51 + 8, v57) + 88);
  v44 = a16;
  v58 = &v29;
  v45 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
  v59 = v45;
  v60 = v45;
  LOBYTE(v52) = 2;
  v61 = &ST04_4_0;
  v62 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  LOBYTE(v52) = 1;
  v48 = sub_428560(
          v51,
          v46,
          ST04_4_0,
          ST08_4_0,
          ST0C_4_0,
          ST10_4_0,
          ST14_4_0,
          v47,
          v29,
          v30,
          v31,
          v32,
          v33,
          v34,
          v35,
          v42);
  v63 = v48;
  if ( !(unsigned __int8)v48 )
  {
    if ( !sub_420800(v51) )
    {
      if ( a16 )
        *(_WORD *)a16 = 4;
    }
    v64 = 0;
    LOBYTE(v52) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    v52 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    return v64;
  }
  v65 = 0;
  v66 = &ST20_1_0;
  v67 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
  v49 = sub_41ACD0(v51, v36, v37, v38, v39, v40, v41, v42);
  v68 = v49;
  v57 = v49;
  if ( v49 < 0 || (v65 = *(_WORD *)(sub_4085D0(v51 + 8, v57) + 88), v53 == v65) )
    goto LABEL_31;
  v50 = sub_4085D0(v51 + 8, v57);
  if ( !(unsigned __int8)sub_422190(v51, *(_WORD *)(v50 + 56), (int)&v69) )
  {
    if ( a16 )
      *(_WORD *)a16 = 4;
    v70 = 0;
    LOBYTE(v52) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    v52 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    return v70;
  }
  if ( sub_424B60(v51, &v71, v69) )
  {
LABEL_31:
    if ( sub_420800(v51) )
    {
      if ( a16 )
      {
        v74 = 0;
        LOBYTE(v52) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        v52 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        result = v74;
      }
      else
      {
        v75 = 1;
        LOBYTE(v52) = 0;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
        v52 = -1;
        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
        result = v75;
      }
    }
    else
    {
      if ( a16 )
        *(_WORD *)a16 = 4;
      v73 = 0;
      LOBYTE(v52) = 0;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
      v52 = -1;
      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
      result = v73;
    }
  }
  else
  {
    if ( a16 )
      *(_WORD *)a16 = v71;
    v72 = 0;
    LOBYTE(v52) = 0;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
    v52 = -1;
    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a9);
    result = v72;
  }
  return result;
}

//----- (0042A590) --------------------------------------------------------
int __fastcall sub_42A590(int a1)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 8);
}

//----- (0042A5B0) --------------------------------------------------------
#error "42A5BD: call analysis failed (funcsize=15)"

//----- (0042A5E0) --------------------------------------------------------
char __fastcall sub_42A5E0(int a1)
{
  char result; // al@2
  int v2; // eax@11
  int v3; // eax@13
  int v4; // eax@15
  int v5; // eax@17
  int v6; // eax@17
  int v7; // eax@19
  int v8; // eax@21
  int v9; // eax@21
  int v10; // eax@23
  int  s; // [sp+B0h] [bp+0h]@1
  unsigned int v12; // [sp+A0h] [bp-10h]@1
  int v13; // [sp+18h] [bp-98h]@1
  int v14; // [sp+80h] [bp-30h]@9
  int v15; // [sp+7Ch] [bp-34h]@11
  char v16; // [sp+60h] [bp-50h]@13
  int v17; // [sp+14h] [bp-9Ch]@13
  int v18; // [sp+10h] [bp-A0h]@13
  signed int v19; // [sp+ACh] [bp-4h]@13
  char v20; // [sp+84h] [bp-2Ch]@17
  char v21; // [sp+40h] [bp-70h]@21
  int v22; // [sp+Ch] [bp-A4h]@21
  int v23; // [sp+8h] [bp-A8h]@21
  char v24; // [sp+20h] [bp-90h]@25

  v12 = (unsigned int)& s ^ dword_43901C;
  v13 = a1;
  if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(a1 + 124, "<NR>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
  {
    result = 0;
  }
  else
  {
    if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(v13 + 124, "</NR>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
    {
      result = 0;
    }
    else
    {
      if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(v13 + 124, "<RES>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
      {
        result = 0;
      }
      else
      {
        if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(v13 + 124, "</RES>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
        {
          result = 0;
        }
        else
        {
          v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(v13 + 124, "&lt;uin&gt;", 0);
          if ( v14 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
          {
            result = 0;
          }
          else
          {
            v14 += 11;
            v2 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                   v13 + 124,
                   "&lt;/uin&gt;",
                   v14);
            v15 = v2;
            if ( v2 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
            {
              result = 0;
            }
            else
            {
              v3 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                     &v16,
                     v13 + 124,
                     v14,
                     v15 - v14);
              v17 = v3;
              v18 = v3;
              v19 = 0;
              std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v13 + 152);
              v19 = -1;
              std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
              v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                      v13 + 124,
                      "&lt;index&gt;",
                      v15 + 12);
              if ( v14 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
              {
                result = 0;
              }
              else
              {
                v14 += 13;
                v4 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                       v13 + 124,
                       "&lt;/index&gt;",
                       v14);
                v15 = v4;
                if ( v4 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                {
                  result = 0;
                }
                else
                {
                  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                    &v20,
                    v13 + 124,
                    v14,
                    v15 - v14);
                  v19 = 1;
                  v5 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str(&v20);
                  *(_DWORD *)(v13 + 180) = atoi((const char *)v5);
                  v6 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                         v13 + 124,
                         "&lt;title&gt;",
                         v15 + 14);
                  v14 = v6;
                  if ( v6 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                  {
                    v19 = -1;
                    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v20);
                    result = 0;
                  }
                  else
                  {
                    v14 += 13;
                    v7 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                           v13 + 124,
                           "&lt;/title&gt;",
                           v14);
                    v15 = v7;
                    if ( v7 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                    {
                      v19 = -1;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v20);
                      result = 0;
                    }
                    else
                    {
                      v8 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                             &v21,
                             v13 + 124,
                             v14,
                             v15 - v14);
                      v22 = v8;
                      v23 = v8;
                      LOBYTE(v19) = 2;
                      std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v13 + 184);
                      LOBYTE(v19) = 1;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v21);
                      v9 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                             v13 + 124,
                             "&lt;desc&gt;",
                             v15 + 14);
                      v14 = v9;
                      if ( v9 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                      {
                        v19 = -1;
                        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v20);
                        result = 0;
                      }
                      else
                      {
                        v14 += 12;
                        v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                                v13 + 124,
                                "&lt;/desc&gt;",
                                v14);
                        v15 = v10;
                        if ( v10 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                        {
                          v19 = -1;
                          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v20);
                          result = 0;
                        }
                        else
                        {
                          std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                            &v24,
                            v13 + 124,
                            v14,
                            v15 - v14);
                          LOBYTE(v19) = 3;
                          std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v13 + 212);
                          LOBYTE(v19) = 1;
                          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v24);
                          v19 = -1;
                          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v20);
                          result = 1;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

//----- (0042AA40) --------------------------------------------------------
char __fastcall sub_42AA40(int a1)
{
  char result; // al@2
  int v2; // eax@11
  int v3; // eax@15
  int v4; // eax@17
  int v5; // eax@21
  int v6; // eax@23
  int v7; // eax@27
  int v8; // eax@29
  int  s; // [sp+A4h] [bp+0h]@1
  unsigned int v10; // [sp+94h] [bp-10h]@1
  int v11; // [sp+8h] [bp-9Ch]@1
  int v12; // [sp+58h] [bp-4Ch]@9
  int v13; // [sp+38h] [bp-6Ch]@11
  char v14; // [sp+78h] [bp-2Ch]@13
  signed int v15; // [sp+A0h] [bp-4h]@13
  char v16; // [sp+5Ch] [bp-48h]@19
  char v17; // [sp+3Ch] [bp-68h]@25
  char v18; // [sp+10h] [bp-94h]@31

  v10 = (unsigned int)& s ^ dword_43901C;
  v11 = a1;
  if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(a1 + 124, "<QUERY>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
  {
    result = 0;
  }
  else
  {
    if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(v11 + 124, "</QUERY>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
    {
      result = 0;
    }
    else
    {
      if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(v11 + 124, "<NOTIFY>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
      {
        result = 0;
      }
      else
      {
        if ( std__basic_string_char_std__char_traits_char__std__allocator_char____find(v11 + 124, "</NOTIFY>", 0) == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
        {
          result = 0;
        }
        else
        {
          v12 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                  v11 + 124,
                  "&lt;PluginID&gt;",
                  0);
          if ( v12 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
          {
            result = 0;
          }
          else
          {
            v12 += 16;
            v2 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                   v11 + 124,
                   "&lt;/PluginID&gt;",
                   v12);
            v13 = v2;
            if ( v2 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
            {
              result = 0;
            }
            else
            {
              std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                &v14,
                v11 + 124,
                v12,
                v13 - v12);
              v15 = 0;
              if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(&v14, "srvMng") )
              {
                v15 = -1;
                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                result = 0;
              }
              else
              {
                v3 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                       v11 + 124,
                       "<NOTIFY>&lt;srv&gt;&lt;id&gt;",
                       v13 + 17);
                v12 = v3;
                if ( v3 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                {
                  v15 = -1;
                  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                  result = 0;
                }
                else
                {
                  v12 += 29;
                  v4 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                         v11 + 124,
                         "&lt;/id&gt;",
                         v12);
                  v13 = v4;
                  if ( v4 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                  {
                    v15 = -1;
                    std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                    result = 0;
                  }
                  else
                  {
                    std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                      &v16,
                      v11 + 124,
                      v12,
                      v13 - v12);
                    LOBYTE(v15) = 1;
                    if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                            &v16,
                                            "cAwaySrv") )
                    {
                      LOBYTE(v15) = 0;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
                      v15 = -1;
                      std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                      result = 0;
                    }
                    else
                    {
                      v5 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                             v11 + 124,
                             "&lt;req&gt;&lt;id&gt;",
                             v13 + 11);
                      v12 = v5;
                      if ( v5 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                      {
                        LOBYTE(v15) = 0;
                        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
                        v15 = -1;
                        std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                        result = 0;
                      }
                      else
                      {
                        v12 += 21;
                        v6 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                               v11 + 124,
                               "&lt;/id&gt;",
                               v12);
                        v13 = v6;
                        if ( v6 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                        {
                          LOBYTE(v15) = 0;
                          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
                          v15 = -1;
                          std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                          result = 0;
                        }
                        else
                        {
                          std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                            &v17,
                            v11 + 124,
                            v12,
                            v13 - v12);
                          LOBYTE(v15) = 2;
                          if ( (unsigned __int8)std__operator___char_std__char_traits_char__std__allocator_char__(
                                                  &v17,
                                                  "AwayStat") )
                          {
                            LOBYTE(v15) = 1;
                            std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v17);
                            LOBYTE(v15) = 0;
                            std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
                            v15 = -1;
                            std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                            result = 0;
                          }
                          else
                          {
                            v7 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                                   v11 + 124,
                                   "&lt;senderId&gt;",
                                   v13 + 11);
                            v12 = v7;
                            if ( v7 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                            {
                              LOBYTE(v15) = 1;
                              std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v17);
                              LOBYTE(v15) = 0;
                              std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
                              v15 = -1;
                              std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                              result = 0;
                            }
                            else
                            {
                              v12 += 16;
                              v8 = std__basic_string_char_std__char_traits_char__std__allocator_char____find(
                                     v11 + 124,
                                     "&lt;/senderId&gt;",
                                     v12);
                              v13 = v8;
                              if ( v8 == (_DWORD)std__basic_string_char_std__char_traits_char__std__allocator_char____npos )
                              {
                                LOBYTE(v15) = 1;
                                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v17);
                                LOBYTE(v15) = 0;
                                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
                                v15 = -1;
                                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                                result = 0;
                              }
                              else
                              {
                                std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
                                  &v18,
                                  v11 + 124,
                                  v12,
                                  v13 - v12);
                                LOBYTE(v15) = 3;
                                std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(v11 + 152);
                                LOBYTE(v15) = 2;
                                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v18);
                                LOBYTE(v15) = 1;
                                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v17);
                                LOBYTE(v15) = 0;
                                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v16);
                                v15 = -1;
                                std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&v14);
                                result = 1;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return result;
}

//----- (0042AF60) --------------------------------------------------------
int __fastcall sub_42AF60(int a1)
{
  int v2; // [sp+4h] [bp-10h]@1

  v2 = a1;
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 212);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 184);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 152);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 124);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 96);
  std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 48);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 12);
}

//----- (0042B020) --------------------------------------------------------
#error "42B05F: call analysis failed (funcsize=64)"

//----- (0042B110) --------------------------------------------------------
int __fastcall sub_42B110(int a1)
{
  return sub_42AF60(a1 + 36);
}

//----- (0042B130) --------------------------------------------------------
int __fastcall sub_42B130(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_42B020();
  return v2;
}

//----- (0042B150) --------------------------------------------------------
int __fastcall sub_42B150(int a1)
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(a1 + 4);
}

//----- (0042B170) --------------------------------------------------------
#error "42B191: call analysis failed (funcsize=17)"

//----- (0042B1A0) --------------------------------------------------------
char __thiscall sub_42B1A0(void *this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@3
  int v5; // eax@3
  int v6; // eax@3
  int v7; // eax@3
  int v8; // eax@3
  int v9; // eax@3
  void *v10; // [sp+0h] [bp-4h]@1

  v10 = this;
  if ( sub_4019B0(a2) >= a3 + 16 )
  {
    v4 = sub_4019D0(a2, a3);
    memcpy(v10, (const void *)v4, 2u);
    *(_WORD *)v10 = ntohs(*(_WORD *)v10);
    a3 += 2;
    v5 = sub_4019D0(a2, a3);
    memcpy((char *)v10 + 4, (const void *)v5, 4u);
    *((_DWORD *)v10 + 1) = ntohl(*((_DWORD *)v10 + 1));
    a3 += 4;
    v6 = sub_4019D0(a2, a3);
    memcpy((char *)v10 + 8, (const void *)v6, 2u);
    *((_WORD *)v10 + 4) = ntohs(*((_WORD *)v10 + 4));
    a3 += 2;
    v7 = sub_4019D0(a2, a3);
    memcpy((char *)v10 + 10, (const void *)v7, 2u);
    *((_WORD *)v10 + 5) = ntohs(*((_WORD *)v10 + 5));
    a3 += 2;
    v8 = sub_4019D0(a2, a3);
    memcpy((char *)v10 + 12, (const void *)v8, 2u);
    *((_WORD *)v10 + 6) = ntohs(*((_WORD *)v10 + 6));
    a3 += 2;
    v9 = sub_4019D0(a2, a3);
    memcpy((char *)v10 + 14, (const void *)v9, 2u);
    *((_WORD *)v10 + 7) = ntohs(*((_WORD *)v10 + 7));
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042B320) --------------------------------------------------------
char __thiscall sub_42B320(void *this, int a2)
{
  char result; // al@5
  int v3; // eax@4
  int v4; // eax@6
  int v5; // eax@6
  int v6; // eax@6
  int v7; // eax@6
  int v8; // eax@6
  int v9; // eax@6
  int v10; // eax@8
  int v11; // ST08_4@10
  int v12; // eax@10
  int v13; // eax@10
  void *v14; // [sp+0h] [bp-Ch]@1
  unsigned int v15; // [sp+8h] [bp-4h]@1
  unsigned __int16 v16; // [sp+4h] [bp-8h]@6

  v14 = this;
  v15 = 0;
  while ( 1 )
  {
    if ( v15 >= sub_4095F0(a2) )
      return 0;
    if ( *(_WORD *)sub_401C80(a2, v15) == 5 )
      break;
    ++v15;
  }
  v3 = sub_401C80(a2, v15);
  if ( (unsigned int)sub_4019B0(v3 + 4) >= 9 )
  {
    v4 = sub_401C80(a2, v15);
    v5 = sub_4019D0(v4 + 4, 0);
    memcpy(v14, (const void *)v5, 4u);
    v6 = sub_401C80(a2, v15);
    *((_BYTE *)v14 + 4) = *(_BYTE *)sub_4019D0(v6 + 4, 4u);
    v7 = sub_401C80(a2, v15);
    *((_BYTE *)v14 + 5) = *(_BYTE *)sub_4019D0(v7 + 4, 5u);
    v8 = sub_401C80(a2, v15);
    v9 = sub_4019D0(v8 + 4, 6u);
    memcpy(&v16, (const void *)v9, 2u);
    if ( (signed int)v16 >= 1 )
    {
      v10 = sub_401C80(a2, v15);
      if ( sub_4019B0(v10 + 4) >= (unsigned int)v16 + 8 )
      {
        v11 = v16 - 1;
        v12 = sub_401C80(a2, v15);
        v13 = sub_4019D0(v12 + 4, 8u);
        std__basic_string_char_std__char_traits_char__std__allocator_char____assign((char *)v14 + 8, v13, v11);
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042B490) --------------------------------------------------------
int __fastcall sub_42B490(int a1)
{
  return sub_42B110(a1 + 16);
}

//----- (0042B4B0) --------------------------------------------------------
int __fastcall sub_42B4B0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_42B130(a1 + 16);
  return v2;
}

//----- (0042B4D0) --------------------------------------------------------
char __thiscall sub_42B4D0(void *this, int a2, unsigned int a3)
{
  int v4; // eax@3
  int v5; // eax@7
  int v6; // eax@9
  int v7; // eax@13
  int v8; // eax@17
  int v9; // eax@19
  int v10; // eax@21
  int v11; // ST08_4@33
  int v12; // eax@33
  int v13; // eax@36
  int v14; // eax@38
  int v15; // eax@40
  int v16; // ST08_4@42
  int v17; // eax@42
  int v18; // eax@46
  int v19; // eax@48
  int v20; // eax@52
  int v21; // eax@56
  int v22; // ST08_4@58
  int v23; // eax@58
  int v24; // eax@60
  int v25; // eax@62
  int v26; // ST08_4@64
  int v27; // eax@64
  int  s; // [sp+4Ch] [bp+0h]@1
  unsigned int v29; // [sp+44h] [bp-8h]@1
  void *v30; // [sp+8h] [bp-44h]@1
  unsigned __int16 v31; // [sp+48h] [bp-4h]@3
  char v32; // [sp+34h] [bp-18h]@7
  int v33; // [sp+35h] [bp-17h]@7
  int v34; // [sp+39h] [bp-13h]@7
  int v35; // [sp+3Dh] [bp-Fh]@7
  __int16 v36; // [sp+41h] [bp-Bh]@7
  char v37; // [sp+43h] [bp-9h]@7
  unsigned int v38; // [sp+4h] [bp-48h]@15
  unsigned int v39; // [sp+0h] [bp-4Ch]@15
  unsigned __int16 v40; // [sp+30h] [bp-1Ch]@21
  int v41; // [sp+2Ch] [bp-20h]@40
  char v42; // [sp+10h] [bp-3Ch]@46
  char v43; // [sp+18h] [bp-34h]@48
  char v44; // [sp+19h] [bp-33h]@48
  char v45; // [sp+1Ah] [bp-32h]@48
  char v46; // [sp+1Bh] [bp-31h]@48
  char v47; // [sp+1Ch] [bp-30h]@48
  char v48; // [sp+1Dh] [bp-2Fh]@48
  char v49; // [sp+1Eh] [bp-2Eh]@48
  char v50; // [sp+1Fh] [bp-2Dh]@48
  char v51; // [sp+20h] [bp-2Ch]@48
  char v52; // [sp+21h] [bp-2Bh]@48
  char v53; // [sp+22h] [bp-2Ah]@48
  char v54; // [sp+23h] [bp-29h]@48
  char v55; // [sp+24h] [bp-28h]@48
  char v56; // [sp+25h] [bp-27h]@48
  char v57; // [sp+26h] [bp-26h]@48
  char v58; // [sp+27h] [bp-25h]@48
  int v59; // [sp+Ch] [bp-40h]@56
  char v60; // [sp+14h] [bp-38h]@60
  int v61; // [sp+28h] [bp-24h]@62

  v29 = (unsigned int)& s ^ dword_43901C;
  v30 = this;
  if ( sub_4019B0(a2) < a3 + 2 )
    return 0;
  v4 = sub_4019D0(a2, a3);
  memcpy(&v31, (const void *)v4, 2u);
  a3 += 2;
  if ( v31 != 27 )
    return 0;
  if ( sub_4019B0(a2) < a3 + 2 )
    return 0;
  v5 = sub_4019D0(a2, a3);
  memcpy(v30, (const void *)v5, 2u);
  a3 += 2;
  v32 = 0;
  v33 = 0;
  v34 = 0;
  v35 = 0;
  v36 = 0;
  v37 = 0;
  if ( sub_4019B0(a2) < a3 + 16 )
    return 0;
  v6 = sub_4019D0(a2, a3);
  if ( memcmp((const void *)v6, &v32, 0x10u) )
    return 0;
  a3 += 16;
  a3 += 11;
  if ( sub_4019B0(a2) < a3 + 2 )
    return 0;
  v7 = sub_4019D0(a2, a3);
  memcpy((char *)v30 + 2, (const void *)v7, 2u);
  a3 += 2;
  a3 += 12;
  if ( sub_4019B0(a2) < a3 + 2 )
    return 0;
  v38 = a3;
  *((_BYTE *)v30 + 4) = *(_BYTE *)sub_4019D0(a2, a3++);
  v39 = a3;
  *((_BYTE *)v30 + 5) = *(_BYTE *)sub_4019D0(a2, a3++);
  if ( sub_4019B0(a2) < a3 + 2 )
    return 0;
  v8 = sub_4019D0(a2, a3);
  memcpy((char *)v30 + 6, (const void *)v8, 2u);
  a3 += 2;
  if ( sub_4019B0(a2) < a3 + 2 )
    return 0;
  v9 = sub_4019D0(a2, a3);
  memcpy((char *)v30 + 8, (const void *)v9, 2u);
  a3 += 2;
  if ( sub_4019B0(a2) < a3 + 2 )
    return 0;
  v10 = sub_4019D0(a2, a3);
  memcpy(&v40, (const void *)v10, 2u);
  a3 += 2;
  if ( *((_BYTE *)v30 + 4) != 1
    && *((_BYTE *)v30 + 4) != 26
    && *((_BYTE *)v30 + 4) != 232
    && *((_BYTE *)v30 + 4) != 233
    && *((_BYTE *)v30 + 4) != 234
    && *((_BYTE *)v30 + 4) != 235
    && *((_BYTE *)v30 + 4) != 236 )
    return 0;
  if ( (signed int)v40 < 1 )
    return 0;
  if ( sub_4019B0(a2) < a3 + v40 )
    return 0;
  v11 = v40 - 1;
  v12 = sub_4019D0(a2, a3);
  std__basic_string_char_std__char_traits_char__std__allocator_char____assign((char *)v30 + 12, v12, v11);
  a3 += v40;
  if ( *((_BYTE *)v30 + 4) == 1 )
  {
    if ( sub_4019B0(a2) < a3 + 4 )
      return 1;
    v13 = sub_4019D0(a2, a3);
    memcpy((char *)v30 + 40, (const void *)v13, 4u);
    a3 += 4;
    if ( sub_4019B0(a2) < a3 + 4 )
      return 1;
    v14 = sub_4019D0(a2, a3);
    memcpy((char *)v30 + 44, (const void *)v14, 4u);
    a3 += 4;
    if ( sub_4019B0(a2) < a3 + 4 )
      return 1;
    v15 = sub_4019D0(a2, a3);
    memcpy(&v41, (const void *)v15, 4u);
    a3 += 4;
    if ( sub_4019B0(a2) < v41 + a3 )
      return 1;
    v16 = v41;
    v17 = sub_4019D0(a2, a3);
    std__basic_string_char_std__char_traits_char__std__allocator_char____assign((char *)v30 + 48, v17, v16);
  }
  else
  {
    if ( *((_BYTE *)v30 + 4) == 26 )
    {
      if ( sub_4019B0(a2) < a3 + 2 )
        return 0;
      v18 = sub_4019D0(a2, a3);
      memcpy(&v42, (const void *)v18, 2u);
      a3 += 2;
      if ( sub_4019B0(a2) < a3 + 16 )
        return 0;
      v19 = sub_4019D0(a2, a3);
      memcpy((char *)v30 + 76, (const void *)v19, 0x10u);
      a3 += 16;
      v43 = 59;
      v44 = 96;
      v45 = -77;
      v46 = -17;
      v47 = -40;
      v48 = 42;
      v49 = 108;
      v50 = 69;
      v51 = -92;
      v52 = -32;
      v53 = -100;
      v54 = 90;
      v55 = 94;
      v56 = 103;
      v57 = -24;
      v58 = 101;
      if ( memcmp((char *)v30 + 76, &v43, 0x10u) )
        return 0;
      if ( sub_4019B0(a2) < a3 + 2 )
        return 0;
      v20 = sub_4019D0(a2, a3);
      memcpy((char *)v30 + 92, (const void *)v20, 2u);
      a3 += 2;
      if ( *((_WORD *)v30 + 46) != 8 )
        return 0;
      if ( sub_4019B0(a2) < a3 + 4 )
        return 0;
      v21 = sub_4019D0(a2, a3);
      memcpy(&v59, (const void *)v21, 4u);
      a3 += 4;
      if ( sub_4019B0(a2) < v59 + a3 )
        return 0;
      v22 = v59;
      v23 = sub_4019D0(a2, a3);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign((char *)v30 + 96, v23, v22);
      a3 += v59;
      a3 += 15;
      if ( sub_4019B0(a2) < a3 + 4 )
        return 0;
      v24 = sub_4019D0(a2, a3);
      memcpy(&v60, (const void *)v24, 4u);
      a3 += 4;
      if ( sub_4019B0(a2) < a3 + 4 )
        return 0;
      v25 = sub_4019D0(a2, a3);
      memcpy(&v61, (const void *)v25, 4u);
      a3 += 4;
      if ( sub_4019B0(a2) < v61 + a3 )
        return 0;
      v26 = v61;
      v27 = sub_4019D0(a2, a3);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign((char *)v30 + 124, v27, v26);
    }
  }
  return 1;
}

//----- (0042BB80) --------------------------------------------------------
int __thiscall sub_42BB80(int this, unsigned __int16 a2)
{
  int v3; // [sp+0h] [bp-8h]@1
  unsigned int v4; // [sp+4h] [bp-4h]@1

  v3 = this;
  v4 = 0;
  while ( v4 < sub_4095F0(v3 + 4) )
  {
    if ( *(_WORD *)sub_401C80(v3 + 4, v4) == a2 )
      return sub_401C80(v3 + 4, v4);
    ++v4;
  }
  return 0;
}

//----- (0042BBE0) --------------------------------------------------------
char __thiscall sub_42BBE0(int this, int a2)
{
  int v3; // ST04_4@1
  int v4; // eax@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  v3 = sub_4019B0(this + 4);
  v4 = sub_4019D0(v5 + 4, 0);
  std__basic_string_char_std__char_traits_char__std__allocator_char____assign(a2, v4, v3);
  return 1;
}

//----- (0042BC20) --------------------------------------------------------
char __thiscall sub_42BC20(int this, int a2)
{
  char result; // al@2
  int v3; // eax@3
  int v4; // [sp+0h] [bp-8h]@1
  u_long netlong; // [sp+4h] [bp-4h]@3

  v4 = this;
  if ( (unsigned int)sub_4019B0(this + 4) >= 4 )
  {
    v3 = sub_4019D0(v4 + 4, 0);
    memcpy(&netlong, (const void *)v3, 4u);
    *(_DWORD *)a2 = ntohl(netlong);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042BC70) --------------------------------------------------------
char __thiscall sub_42BC70(int this, int a2)
{
  char result; // al@2
  int v3; // eax@3
  int v4; // [sp+0h] [bp-8h]@1
  u_short v5; // [sp+4h] [bp-4h]@3

  v4 = this;
  if ( (unsigned int)sub_4019B0(this + 4) >= 2 )
  {
    v3 = sub_4019D0(v4 + 4, 0);
    memcpy(&v5, (const void *)v3, 2u);
    *(_WORD *)a2 = ntohs(v5);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042BCD0) --------------------------------------------------------
int __fastcall sub_42BCD0(int a1)
{
  return sub_4017F0(a1 + 4);
}

//----- (0042BD10) --------------------------------------------------------
int __fastcall sub_42BD10(int a1)
{
  return sub_4017F0(a1 + 4);
}

//----- (0042BD30) --------------------------------------------------------
char __thiscall sub_42BD30(void *this, int a2)
{
  char result; // al@5
  int v3; // eax@4
  int v4; // eax@6
  int v5; // eax@8
  int v6; // eax@10
  int v7; // eax@10
  int v8; // ST10_4@10
  int v9; // ST08_4@10
  int v10; // eax@10
  int v11; // eax@10
  int v12; // eax@10
  int v13; // ST10_4@10
  int v14; // ST0C_4@10
  int v15; // ST08_4@10
  int v16; // eax@10
  int v17; // eax@10
  void *v18; // [sp+0h] [bp-40h]@1
  unsigned int v19; // [sp+3Ch] [bp-4h]@1
  int v20; // [sp+34h] [bp-Ch]@4
  unsigned int v21; // [sp+2Ch] [bp-14h]@6
  u_short v22; // [sp+30h] [bp-10h]@6
  u_short v23; // [sp+38h] [bp-8h]@8
  char v24; // [sp+24h] [bp-1Ch]@10
  char v25; // [sp+1Ch] [bp-24h]@10
  char v26; // [sp+14h] [bp-2Ch]@10
  char v27; // [sp+Ch] [bp-34h]@10
  char v28; // [sp+4h] [bp-3Ch]@10

  v18 = this;
  v19 = 0;
  while ( 1 )
  {
    if ( v19 >= sub_4095F0(a2) )
      return 0;
    if ( *(_WORD *)sub_401C80(a2, v19) == 2 )
      break;
    ++v19;
  }
  v3 = sub_401C80(a2, v19) + 4;
  v20 = v3;
  if ( (unsigned int)sub_4019B0(v3) >= 0xC )
  {
    v21 = 2;
    v4 = sub_4019D0(v20, 2u);
    memcpy(&v22, (const void *)v4, 2u);
    v22 = ntohs(v22);
    if ( sub_4019B0(v20) >= (unsigned int)v22 + 12 )
    {
      v21 += v22 + 4;
      v5 = sub_4019D0(v20, v21);
      memcpy(&v23, (const void *)v5, 2u);
      v23 = ntohs(v23) - 4;
      if ( sub_4019B0(v20) >= v22 + (unsigned int)v23 + 12 )
      {
        v21 += 2;
        v6 = sub_4019D0(v20, v21);
        memcpy(v18, (const void *)v6, 2u);
        *(_WORD *)v18 = ntohs(*(_WORD *)v18);
        v21 += 2;
        v7 = sub_4019D0(v20, v21);
        memcpy((char *)v18 + 2, (const void *)v7, 2u);
        *((_WORD *)v18 + 1) = ntohs(*((_WORD *)v18 + 1));
        v21 += 2;
        v8 = v23;
        v9 = v21;
        v10 = sub_402FA0(v20, (int)&v24);
        v11 = sub_401EE0(v10, (int)&v25, v9);
        v12 = sub_401EE0(v11, (int)&v26, v8);
        v13 = *(_DWORD *)(v12 + 4);
        v14 = *(_DWORD *)v12;
        v15 = v21;
        v16 = sub_402FA0(v20, (int)&v27);
        v17 = sub_401EE0(v16, (int)&v28, v15);
        sub_403BD0((int)((char *)v18 + 4), *(_DWORD *)v17, *(_DWORD *)(v17 + 4), v14, v13);
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042BF30) --------------------------------------------------------
char __thiscall sub_42BF30(int this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@3
  int v5; // eax@3
  int v6; // ST10_4@5
  int v7; // ST08_4@5
  int v8; // eax@5
  int v9; // eax@5
  int v10; // eax@5
  int v11; // ST10_4@5
  int v12; // ST0C_4@5
  int v13; // ST08_4@5
  int v14; // eax@5
  int v15; // eax@5
  int v16; // [sp+4h] [bp-30h]@1
  unsigned int v17; // [sp+0h] [bp-34h]@3
  unsigned __int8 v18; // [sp+33h] [bp-1h]@3
  char v19; // [sp+28h] [bp-Ch]@5
  char v20; // [sp+20h] [bp-14h]@5
  char v21; // [sp+18h] [bp-1Ch]@5
  char v22; // [sp+10h] [bp-24h]@5
  char v23; // [sp+8h] [bp-2Ch]@5

  v16 = this;
  if ( sub_4019B0(a2) >= a3 + 11 )
  {
    v4 = sub_4019D0(a2, a3);
    memcpy((void *)(v16 + 4), (const void *)v4, 8u);
    a3 += 8;
    v5 = sub_4019D0(a2, a3);
    memcpy((void *)(v16 + 12), (const void *)v5, 2u);
    *(_WORD *)(v16 + 12) = ntohs(*(_WORD *)(v16 + 12));
    a3 += 2;
    v17 = a3;
    v18 = *(_BYTE *)sub_4019D0(a2, a3++);
    if ( sub_4019B0(a2) >= a3 + v18 )
    {
      v6 = v18;
      v7 = a3;
      v8 = sub_402FA0(a2, (int)&v19);
      v9 = sub_401EE0(v8, (int)&v20, v7);
      v10 = sub_401EE0(v9, (int)&v21, v6);
      v11 = *(_DWORD *)(v10 + 4);
      v12 = *(_DWORD *)v10;
      v13 = a3;
      v14 = sub_402FA0(a2, (int)&v22);
      v15 = sub_401EE0(v14, (int)&v23, v13);
      sub_403BD0(v16 + 16, *(_DWORD *)v15, *(_DWORD *)(v15 + 4), v12, v11);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042C060) --------------------------------------------------------
int __fastcall sub_42C060(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_401700(a1 + 4);
  return v2;
}

//----- (0042C080) --------------------------------------------------------
int __fastcall sub_42C080(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_401700(a1 + 12);
  return v2;
}

//----- (0042C0A0) --------------------------------------------------------
char __thiscall sub_42C0A0(int this, SOCKET s)
{
  char result; // al@4
  int v3; // eax@1
  int v4; // eax@1
  u_short v5; // ax@1
  int v6; // eax@1
  int v7; // ST0C_4@2
  int v8; // ST08_4@2
  int v9; // eax@2
  int v10; // ST08_4@3
  int v11; // eax@3
  int v12; // esi@3
  int v13; // [sp+4h] [bp-28h]@1
  char v14; // [sp+10h] [bp-1Ch]@1
  u_short v15; // [sp+Ch] [bp-20h]@1
  u_short v16; // [sp+28h] [bp-4h]@1

  v13 = this;
  v3 = sub_4019B0(this + 4);
  sub_401770((int)&v14, v3 + 6);
  *(_BYTE *)sub_4019D0((int)&v14, 0) = 42;
  *(_BYTE *)sub_4019D0((int)&v14, 1u) = *(_BYTE *)v13;
  v15 = htons(*(_WORD *)(v13 + 2));
  v4 = sub_4019D0((int)&v14, 2u);
  memcpy((void *)v4, &v15, 2u);
  v5 = sub_4019B0(v13 + 4);
  v16 = htons(v5);
  v6 = sub_4019D0((int)&v14, 4u);
  memcpy((void *)v6, &v16, 2u);
  if ( sub_4019B0(v13 + 4) )
  {
    v7 = sub_4019B0(v13 + 4);
    v8 = sub_4019D0(v13 + 4, 0);
    v9 = sub_4019D0((int)&v14, 6u);
    memcpy((void *)v9, (const void *)v8, v7);
  }
  *(_DWORD *)(v13 + 28) = -1;
  v10 = sub_4019B0(v13 + 4) + 6;
  v11 = sub_4019D0((int)&v14, 0);
  v12 = send(s, (const char *)v11, v10, 0);
  if ( v12 == sub_4019B0(v13 + 4) + 6 )
  {
    sub_4017F0((int)&v14);
    result = 1;
  }
  else
  {
    sub_4017F0((int)&v14);
    result = 0;
  }
  return result;
}

//----- (0042C1E0) --------------------------------------------------------
int __fastcall sub_42C1E0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_401700(a1 + 4);
  return v2;
}

//----- (0042C200) --------------------------------------------------------
int __thiscall sub_42C200(int this, int a2, unsigned int a3)
{
  int result; // eax@3
  int v4; // eax@3
  int v5; // eax@3
  int v6; // eax@3
  int v7; // eax@3
  int v8; // eax@3
  int v9; // eax@3
  int v10; // [sp+8h] [bp-1Ch]@1
  u_short v11; // [sp+14h] [bp-10h]@3
  u_long v12; // [sp+1Ch] [bp-8h]@3
  u_short v13; // [sp+10h] [bp-14h]@3
  u_short v14; // [sp+20h] [bp-4h]@3
  u_short v15; // [sp+18h] [bp-Ch]@3
  u_short v16; // [sp+Ch] [bp-18h]@3

  v10 = this;
  if ( sub_4019B0(a2) < a3 + 16 )
    sub_401990(a2, a3 + 16);
  v11 = htons(*(_WORD *)v10);
  v4 = sub_4019D0(a2, a3);
  memcpy((void *)v4, &v11, 2u);
  a3 += 2;
  v12 = htonl(*(_DWORD *)(v10 + 4));
  v5 = sub_4019D0(a2, a3);
  memcpy((void *)v5, &v12, 4u);
  a3 += 4;
  v13 = htons(*(_WORD *)(v10 + 8));
  v6 = sub_4019D0(a2, a3);
  memcpy((void *)v6, &v13, 2u);
  a3 += 2;
  v14 = htons(*(_WORD *)(v10 + 10));
  v7 = sub_4019D0(a2, a3);
  memcpy((void *)v7, &v14, 2u);
  a3 += 2;
  v15 = htons(*(_WORD *)(v10 + 12));
  v8 = sub_4019D0(a2, a3);
  memcpy((void *)v8, &v15, 2u);
  a3 += 2;
  v16 = htons(*(_WORD *)(v10 + 14));
  v9 = sub_4019D0(a2, a3);
  memcpy((void *)v9, &v16, 2u);
  a3 += 2;
  *(_BYTE *)sub_4019D0(a2, a3++) = 0;
  result = sub_4019D0(a2, a3);
  *(_BYTE *)result = 0;
  ++a3;
  return result;
}

//----- (0042C3B0) --------------------------------------------------------
int __fastcall sub_42C3B0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_401AD0(a1 + 40);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 4);
}

//----- (0042C3E0) --------------------------------------------------------
int __fastcall sub_42C3E0(int a1)
{
  int ST00_4_0; // ST00_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int v5; // ST04_4@1

  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    a1 + 4,
    ST00_4_0,
    a1,
    ST08_4_0,
    ST0C_4_0);
  sub_401A60(v5 + 40);
  return v5;
}

//----- (0042C440) --------------------------------------------------------
void *__thiscall sub_42C440(void *this, int a2, unsigned int a3)
{
  void *result; // eax@20
  int v4; // eax@3
  int v5; // eax@5
  int v6; // eax@5
  int v7; // eax@5
  int v8; // eax@7
  int v9; // eax@9
  int v10; // eax@11
  int v11; // eax@13
  int v12; // eax@15
  size_t v13; // ST08_4@15
  int v14; // ST04_4@15
  int v15; // eax@15
  int v16; // eax@18
  int v17; // eax@20
  int v18; // eax@24
  size_t v19; // ST08_4@26
  int v20; // ST04_4@26
  int v21; // eax@26
  int v22; // eax@30
  int v23; // eax@30
  int v24; // eax@32
  int v25; // eax@34
  size_t v26; // ST08_4@34
  int v27; // ST04_4@34
  int v28; // eax@34
  int v29; // eax@34
  int v30; // eax@34
  int v31; // eax@36
  int v32; // eax@38
  size_t v33; // ST08_4@38
  int v34; // ST04_4@38
  int v35; // eax@38
  void *v36; // [sp+0h] [bp-20h]@1
  __int16 v37; // [sp+1Ch] [bp-4h]@1
  unsigned __int16 v38; // [sp+18h] [bp-8h]@13
  size_t v39; // [sp+14h] [bp-Ch]@22
  __int16 v40; // [sp+8h] [bp-18h]@28
  size_t v41; // [sp+4h] [bp-1Ch]@32
  size_t v42; // [sp+10h] [bp-10h]@34
  int v43; // [sp+Ch] [bp-14h]@34

  v36 = this;
  v37 = 27;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v4 = sub_4019D0(a2, a3);
  memcpy((void *)v4, &v37, 2u);
  a3 += 2;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v5 = sub_4019D0(a2, a3);
  memcpy((void *)v5, v36, 2u);
  a3 += 2;
  sub_401990(a2, a3 + 16);
  v6 = sub_4019D0(a2, a3);
  memset((void *)v6, 0, 0x10u);
  a3 += 16;
  sub_401990(a2, a3 + 25);
  v7 = sub_4019D0(a2, a3);
  memset((void *)v7, 0, 0x19u);
  *(_BYTE *)sub_4019D0(a2, a3 + 2) = 3;
  *(_BYTE *)sub_4019D0(a2, a3 + 6) = 4;
  *(_BYTE *)sub_4019D0(a2, a3 + 9) = 14;
  a3 += 25;
  if ( sub_4019B0(a2) < a3 + 1 )
    sub_401990(a2, a3 + 1);
  v8 = sub_4019D0(a2, a3);
  memcpy((void *)v8, (char *)v36 + 4, 1u);
  ++a3;
  if ( sub_4019B0(a2) < a3 + 1 )
    sub_401990(a2, a3 + 1);
  v9 = sub_4019D0(a2, a3);
  memcpy((void *)v9, (char *)v36 + 5, 1u);
  ++a3;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v10 = sub_4019D0(a2, a3);
  memcpy((void *)v10, (char *)v36 + 6, 2u);
  a3 += 2;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v11 = sub_4019D0(a2, a3);
  memcpy((void *)v11, (char *)v36 + 8, 2u);
  a3 += 2;
  v38 = (unsigned __int16)std__basic_string_char_std__char_traits_char__std__allocator_char____length((char *)v36 + 12)
      + 1;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v12 = sub_4019D0(a2, a3);
  memcpy((void *)v12, &v38, 2u);
  a3 += 2;
  sub_401990(a2, a3 + v38);
  v13 = v38;
  v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____c_str((char *)v36 + 12);
  v15 = sub_4019D0(a2, a3);
  memcpy((void *)v15, (const void *)v14, v13);
  a3 += v38;
  if ( *((_BYTE *)v36 + 4) == 1 )
  {
    if ( sub_4019B0(a2) < a3 + 4 )
      sub_401990(a2, a3 + 4);
    v16 = sub_4019D0(a2, a3);
    memcpy((void *)v16, (char *)v36 + 40, 4u);
    a3 += 4;
    if ( sub_4019B0(a2) < a3 + 4 )
      sub_401990(a2, a3 + 4);
    v17 = sub_4019D0(a2, a3);
    memcpy((void *)v17, (char *)v36 + 44, 4u);
    a3 += 4;
    result = (void *)(unsigned __int8)std__basic_string_char_std__char_traits_char__std__allocator_char____empty((char *)v36 + 48);
    if ( !(unsigned __int8)result )
    {
      v39 = std__basic_string_char_std__char_traits_char__std__allocator_char____length((char *)v36 + 48);
      if ( sub_4019B0(a2) < a3 + 4 )
        sub_401990(a2, a3 + 4);
      v18 = sub_4019D0(a2, a3);
      memcpy((void *)v18, &v39, 4u);
      a3 += 4;
      if ( sub_4019B0(a2) < v39 + a3 )
        sub_401990(a2, v39 + a3);
      v19 = v39;
      v20 = std__basic_string_char_std__char_traits_char__std__allocator_char____data((char *)v36 + 48);
      v21 = sub_4019D0(a2, a3);
      result = memcpy((void *)v21, (const void *)v20, v19);
    }
  }
  else
  {
    result = (void *)*((_BYTE *)v36 + 4);
    if ( result == (void *)26 )
    {
      v40 = (unsigned __int16)std__basic_string_char_std__char_traits_char__std__allocator_char____length((char *)v36 + 96)
          + 37;
      if ( sub_4019B0(a2) < a3 + 2 )
        sub_401990(a2, a3 + 2);
      v22 = sub_4019D0(a2, a3);
      memcpy((void *)v22, &v40, 2u);
      a3 += 2;
      sub_401990(a2, a3 + 16);
      v23 = sub_4019D0(a2, a3);
      memcpy((void *)v23, (char *)v36 + 76, 0x10u);
      a3 += 16;
      if ( sub_4019B0(a2) < a3 + 2 )
        sub_401990(a2, a3 + 2);
      v24 = sub_4019D0(a2, a3);
      memcpy((void *)v24, (char *)v36 + 92, 2u);
      a3 += 2;
      v41 = std__basic_string_char_std__char_traits_char__std__allocator_char____length((char *)v36 + 96);
      if ( sub_4019B0(a2) < a3 + 4 )
        sub_401990(a2, a3 + 4);
      v25 = sub_4019D0(a2, a3);
      memcpy((void *)v25, &v41, 4u);
      a3 += 4;
      sub_401990(a2, v41 + a3);
      v26 = v41;
      v27 = std__basic_string_char_std__char_traits_char__std__allocator_char____data((char *)v36 + 96);
      v28 = sub_4019D0(a2, a3);
      memcpy((void *)v28, (const void *)v27, v26);
      a3 += v41;
      sub_401990(a2, a3 + 15);
      v29 = sub_4019D0(a2, a3);
      memset((void *)v29, 0, 0xFu);
      *(_BYTE *)sub_4019D0(a2, a3 + 2) = 1;
      a3 += 15;
      v30 = std__basic_string_char_std__char_traits_char__std__allocator_char____length((char *)v36 + 124);
      v42 = v30;
      v43 = v30 + 4;
      if ( sub_4019B0(a2) < a3 + 4 )
        sub_401990(a2, a3 + 4);
      v31 = sub_4019D0(a2, a3);
      memcpy((void *)v31, &v43, 4u);
      a3 += 4;
      if ( sub_4019B0(a2) < a3 + 4 )
        sub_401990(a2, a3 + 4);
      v32 = sub_4019D0(a2, a3);
      memcpy((void *)v32, &v42, 4u);
      a3 += 4;
      sub_401990(a2, v42 + a3);
      v33 = v42;
      v34 = std__basic_string_char_std__char_traits_char__std__allocator_char____data((char *)v36 + 124);
      v35 = sub_4019D0(a2, a3);
      result = memcpy((void *)v35, (const void *)v34, v33);
    }
  }
  return result;
}

//----- (0042CB30) --------------------------------------------------------
void *__thiscall sub_42CB30(int this, int a2, unsigned int a3)
{
  int v4; // esi@1
  int v5; // eax@2
  int v6; // eax@3
  int v7; // eax@3
  int v8; // esi@3
  int v9; // ST08_4@3
  int v10; // ST04_4@3
  int v11; // eax@3
  int v12; // [sp+8h] [bp-8h]@1
  u_short v13; // [sp+Ch] [bp-4h]@3
  unsigned int v14; // [sp+4h] [bp-Ch]@3

  v12 = this;
  v4 = sub_4019B0(a2);
  if ( v4 < a3 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(v12 + 16) + 11 )
  {
    v5 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v12 + 16);
    sub_401990(a2, a3 + v5 + 11);
  }
  v6 = sub_4019D0(a2, a3);
  memcpy((void *)v6, (const void *)(v12 + 4), 8u);
  a3 += 8;
  v13 = htons(*(_WORD *)(v12 + 12));
  v7 = sub_4019D0(a2, a3);
  memcpy((void *)v7, &v13, 2u);
  a3 += 2;
  v14 = a3;
  v8 = sub_4019D0(a2, a3);
  *(_BYTE *)v8 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v12 + 16);
  ++a3;
  v9 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v12 + 16);
  v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(v12 + 16);
  v11 = sub_4019D0(a2, a3);
  return memcpy((void *)v11, (const void *)v10, v9);
}

//----- (0042CC40) --------------------------------------------------------
int __fastcall sub_42CC40(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_4331AC;
  sub_401AD0(v2 + 44);
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(v2 + 16);
}

//----- (0042CC70) --------------------------------------------------------
int __fastcall sub_42CC70(int a1)
{
  int ST00_4_0; // ST00_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int v5; // ST04_4@1

  *(_DWORD *)a1 = &off_4331AC;
  std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(
    a1 + 16,
    ST00_4_0,
    a1,
    ST08_4_0,
    ST0C_4_0);
  sub_401A60(v5 + 44);
  return v5;
}

//----- (0042CCE0) --------------------------------------------------------
int __fastcall sub_42CCE0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_43317C;
  return sub_401AD0(v2 + 4);
}

//----- (0042CD00) --------------------------------------------------------
int __fastcall sub_42CD00(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_43317C;
  sub_401A60(v2 + 4);
  return v2;
}

//----- (0042CD30) --------------------------------------------------------
void *__thiscall sub_42CD30(u_short *this, int a2, unsigned int a3)
{
  void *result; // eax@3
  int v4; // esi@1
  int v5; // eax@2
  u_short v6; // ax@3
  int v7; // eax@3
  int v8; // eax@3
  int v9; // ST08_4@4
  int v10; // ST04_4@4
  int v11; // eax@4
  u_short *v12; // [sp+4h] [bp-Ch]@1
  u_short v13; // [sp+8h] [bp-8h]@3
  u_short v14; // [sp+Ch] [bp-4h]@3

  v12 = this;
  v4 = sub_4019B0(a2);
  if ( v4 < a3 + sub_4019B0((int)(v12 + 2)) + 4 )
  {
    v5 = sub_4019B0((int)(v12 + 2));
    sub_401990(a2, a3 + v5 + 4);
  }
  v13 = htons(*v12);
  v6 = sub_4019B0((int)(v12 + 2));
  v14 = htons(v6);
  v7 = sub_4019D0(a2, a3);
  memcpy((void *)v7, &v13, 2u);
  v8 = sub_4019D0(a2, a3 + 2);
  memcpy((void *)v8, &v14, 2u);
  result = (void *)sub_4019B0((int)(v12 + 2));
  if ( result )
  {
    v9 = sub_4019B0((int)(v12 + 2));
    v10 = sub_4019D0((int)(v12 + 2), 0);
    v11 = sub_4019D0(a2, a3 + 4);
    result = memcpy((void *)v11, (const void *)v10, v9);
  }
  return result;
}

//----- (0042CE20) --------------------------------------------------------
char __thiscall sub_42CE20(int this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@3
  int v5; // eax@3
  int v6; // ST18_4@5
  int v7; // ST08_4@5
  int v8; // eax@5
  int v9; // eax@5
  int v10; // eax@5
  int v11; // eax@5
  int v12; // ST18_4@5
  int v13; // ST14_4@5
  int v14; // ST08_4@5
  int v15; // eax@5
  int v16; // eax@5
  int v17; // eax@5
  int v18; // [sp+0h] [bp-44h]@1
  u_short v19; // [sp+3Ch] [bp-8h]@3
  u_short v20; // [sp+40h] [bp-4h]@3
  char v21; // [sp+34h] [bp-10h]@5
  char v22; // [sp+2Ch] [bp-18h]@5
  char v23; // [sp+24h] [bp-20h]@5
  char v24; // [sp+1Ch] [bp-28h]@5
  char v25; // [sp+14h] [bp-30h]@5
  char v26; // [sp+Ch] [bp-38h]@5
  char v27; // [sp+4h] [bp-40h]@5

  v18 = this;
  if ( sub_4019B0(a2) >= a3 + 4 )
  {
    v4 = sub_4019D0(a2, a3);
    memcpy(&v19, (const void *)v4, 2u);
    *(_WORD *)v18 = ntohs(v19);
    v5 = sub_4019D0(a2, a3 + 2);
    memcpy(&v19, (const void *)v5, 2u);
    v20 = ntohs(v19);
    if ( sub_4019B0(a2) >= a3 + v20 + 4 )
    {
      v6 = v20;
      v7 = a3;
      v8 = sub_402FA0(a2, (int)&v21);
      v9 = sub_401EE0(v8, (int)&v22, v7);
      v10 = sub_401EE0(v9, (int)&v23, 4);
      v11 = sub_401EE0(v10, (int)&v24, v6);
      v12 = *(_DWORD *)(v11 + 4);
      v13 = *(_DWORD *)v11;
      v14 = a3;
      v15 = sub_402FA0(a2, (int)&v25);
      v16 = sub_401EE0(v15, (int)&v26, v14);
      v17 = sub_401EE0(v16, (int)&v27, 4);
      sub_403B50(v18 + 4, *(_DWORD *)v17, *(_DWORD *)(v17 + 4), v13, v12);
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042CF40) --------------------------------------------------------
int __thiscall sub_42CF40(int this, char a2, int a3, int a4, int a5, int a6, int a7, int a8)
{
  int v9; // ST0C_4@1
  int v10; // eax@1
  int v11; // [sp+4h] [bp-24h]@1
  signed int v12; // [sp+24h] [bp-4h]@1
  char v13; // [sp+10h] [bp-18h]@1
  char v14; // [sp+8h] [bp-20h]@1

  v11 = this;
  v12 = 0;
  v9 = *(_DWORD *)std__basic_string_char_std__char_traits_char__std__allocator_char____end(&a2, &v13);
  v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____begin(&a2);
  sub_403B90(v11 + 4, *(_DWORD *)v10, *(_DWORD *)(v10 + 4), (char)&v14, v9);
  v12 = -1;
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&a2);
}

//----- (0042CFD0) --------------------------------------------------------
void *__thiscall sub_42CFD0(int this, u_long hostlong)
{
  int v3; // eax@1
  int v4; // [sp+0h] [bp-8h]@1
  u_long v5; // [sp+4h] [bp-4h]@1

  v4 = this;
  v5 = htonl(hostlong);
  sub_401990(v4 + 4, 4u);
  v3 = sub_4019D0(v4 + 4, 0);
  return memcpy((void *)v3, &v5, 4u);
}

//----- (0042D020) --------------------------------------------------------
void *__thiscall sub_42D020(int this, u_short a2)
{
  int v3; // eax@1
  int v4; // [sp+0h] [bp-8h]@1
  u_short v5; // [sp+4h] [bp-4h]@1

  v4 = this;
  v5 = htons(a2);
  sub_401990(v4 + 4, 2u);
  v3 = sub_4019D0(v4 + 4, 0);
  return memcpy((void *)v3, &v5, 2u);
}

//----- (0042D070) --------------------------------------------------------
void *__thiscall sub_42D070(int this, int a2, unsigned int a3)
{
  void *result; // eax@3
  int v4; // esi@1
  int v5; // eax@2
  int v6; // eax@3
  int v7; // eax@3
  int v8; // eax@3
  int v9; // eax@3
  int v10; // ST08_4@4
  int v11; // ST04_4@4
  int v12; // eax@4
  int v13; // [sp+4h] [bp-14h]@1
  u_short v14; // [sp+Ch] [bp-Ch]@3
  u_short v15; // [sp+10h] [bp-8h]@3
  u_short v16; // [sp+14h] [bp-4h]@3
  u_long v17; // [sp+8h] [bp-10h]@3

  v13 = this;
  v4 = sub_4019B0(a2);
  if ( v4 < a3 + sub_4019B0(v13 + 12) + 10 )
  {
    v5 = sub_4019B0(v13 + 12);
    sub_401990(a2, a3 + v5 + 10);
  }
  v14 = htons(*(_WORD *)v13);
  v15 = htons(*(_WORD *)(v13 + 2));
  v16 = htons(*(_WORD *)(v13 + 4));
  v17 = htonl(*(_DWORD *)(v13 + 8));
  v6 = sub_4019D0(a2, a3);
  memcpy((void *)v6, &v14, 2u);
  v7 = sub_4019D0(a2, a3 + 2);
  memcpy((void *)v7, &v15, 2u);
  v8 = sub_4019D0(a2, a3 + 4);
  memcpy((void *)v8, &v16, 2u);
  v9 = sub_4019D0(a2, a3 + 6);
  memcpy((void *)v9, &v17, 4u);
  result = (void *)sub_4019B0(v13 + 12);
  if ( result )
  {
    v10 = sub_4019B0(v13 + 12);
    v11 = sub_4019D0(v13 + 12, 0);
    v12 = sub_4019D0(a2, a3 + 10);
    result = memcpy((void *)v12, (const void *)v11, v10);
  }
  return result;
}

//----- (0042D1C0) --------------------------------------------------------
char __thiscall sub_42D1C0(void *this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@3
  int v5; // eax@3
  int v6; // eax@3
  int v7; // eax@3
  int v8; // eax@3
  int v9; // ST18_4@3
  int v10; // ST14_4@3
  int v11; // ST08_4@3
  int v12; // eax@3
  int v13; // eax@3
  int v14; // eax@3
  void *v15; // [sp+0h] [bp-24h]@1
  char v16; // [sp+1Ch] [bp-8h]@3
  char v17; // [sp+14h] [bp-10h]@3
  char v18; // [sp+Ch] [bp-18h]@3
  char v19; // [sp+4h] [bp-20h]@3

  v15 = this;
  if ( sub_4019B0(a2) >= a3 + 10 )
  {
    v4 = sub_4019D0(a2, a3);
    memcpy(v15, (const void *)v4, 2u);
    *(_WORD *)v15 = ntohs(*(_WORD *)v15);
    v5 = sub_4019D0(a2, a3 + 2);
    memcpy((char *)v15 + 2, (const void *)v5, 2u);
    *((_WORD *)v15 + 1) = ntohs(*((_WORD *)v15 + 1));
    v6 = sub_4019D0(a2, a3 + 4);
    memcpy((char *)v15 + 4, (const void *)v6, 2u);
    *((_WORD *)v15 + 2) = ntohs(*((_WORD *)v15 + 2));
    v7 = sub_4019D0(a2, a3 + 6);
    memcpy((char *)v15 + 8, (const void *)v7, 4u);
    *((_DWORD *)v15 + 2) = ntohl(*((_DWORD *)v15 + 2));
    v8 = sub_40EB60(a2, (int)&v16);
    v9 = *(_DWORD *)(v8 + 4);
    v10 = *(_DWORD *)v8;
    v11 = a3;
    v12 = sub_402FA0(a2, (int)&v17);
    v13 = sub_401EE0(v12, (int)&v18, v11);
    v14 = sub_401EE0(v13, (int)&v19, 10);
    sub_403B50((int)((char *)v15 + 12), *(_DWORD *)v14, *(_DWORD *)(v14 + 4), v10, v9);
    result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042D310) --------------------------------------------------------
char __thiscall sub_42D310(int this, SOCKET s)
{
  char result; // al@2
  int v3; // eax@12
  int v4; // eax@24
  int v5; // eax@28
  int v6; // eax@28
  u_short v7; // ax@28
  int v8; // eax@41
  int v9; // eax@53
  int v10; // [sp+4h] [bp-16Ch]@1
  char v11; // [sp+2Ch] [bp-144h]@1
  signed int v12; // [sp+16Ch] [bp-4h]@1
  u_long len; // [sp+158h] [bp-18h]@1
  struct timeval timeout; // [sp+14Ch] [bp-24h]@4
  fd_set readfds; // [sp+44h] [bp-12Ch]@4
  u_int v16; // [sp+20h] [bp-150h]@4
  int v17; // [sp+24h] [bp-14Ch]@12
  u_short v18; // [sp+15Ch] [bp-14h]@28
  char *p->pkt.uin; // [sp+160h] [bp-10h]@28
  u_long v20; // [sp+28h] [bp-148h]@28
  u_int v21; // [sp+18h] [bp-158h]@33
  int v22; // [sp+1Ch] [bp-154h]@41
  int v23; // [sp+154h] [bp-1Ch]@53

  v10 = this;
  sub_401770((int)&v11, 6u);
  v12 = 0;
  *(_DWORD *)(v10 + 28) = -1;
  len = 0;
  if ( ioctlsocket(s, 1074030207, &len) )
  {
    v12 = -1;
    sub_4017F0((int)&v11);
    return 0;
  }
  if ( len < 6 )
  {
    timeout.tv_sec = 0;
    timeout.tv_usec = 300000;
    readfds.fd_count = 0;
    v16 = 0;
    while ( v16 < readfds.fd_count && readfds.fd_array[v16] != s )
      ++v16;
    if ( v16 == readfds.fd_count )
    {
      if ( (_DWORD)readfds.fd_count < 0x40u )
      {
        readfds.fd_array[v16] = s;
        ++readfds.fd_count;
      }
    }
    v3 = select(s + 1, &readfds, 0, 0, &timeout);
    v17 = v3;
    if ( !v3 )
      goto LABEL_23;
    if ( v17 < 0 )
    {
      v12 = -1;
      sub_4017F0((int)&v11);
      return 0;
    }
    if ( !_WSAFDIsSet(s, &readfds) )
    {
      v12 = -1;
      sub_4017F0((int)&v11);
      return 0;
    }
    len = 0;
    if ( ioctlsocket(s, 1074030207, &len) )
    {
      v12 = -1;
      sub_4017F0((int)&v11);
      return 0;
    }
    if ( len < 1 )
    {
      v12 = -1;
      sub_4017F0((int)&v11);
      return 0;
    }
  }
  if ( len < 6 )
  {
LABEL_23:
    *(_DWORD *)(v10 + 28) = -2;
    v12 = -1;
    sub_4017F0((int)&v11);
    return 0;
  }
  v4 = sub_4019D0((int)&v11, 0);
  if ( recv(s, (char *)v4, 6, 0) == 6 )
  {
    if ( *(_BYTE *)sub_4019D0((int)&v11, 0) == 42 )
    {
      *(_BYTE *)v10 = *(_BYTE *)sub_4019D0((int)&v11, 1u);
      v5 = sub_4019D0((int)&v11, 2u);
      memcpy((void *)(v10 + 2), (const void *)v5, 2u);
      *(_WORD *)(v10 + 2) = ntohs(*(_WORD *)(v10 + 2));
      v6 = sub_4019D0((int)&v11, 4u);
      memcpy(&v18, (const void *)v6, 2u);
      v7 = ntohs(v18);
      v18 = v7;
      sub_401990(v10 + 4, v7);
      p->pkt.uin = (char *)sub_4019D0(v10 + 4, 0);
      v20 = v18;
      while ( (signed int)v20 > 0 )
      {
        len = 0;
        if ( ioctlsocket(s, 1074030207, &len) )
        {
          v12 = -1;
          sub_4017F0((int)&v11);
          return 0;
        }
        if ( !len )
        {
          timeout.tv_sec = 30;
          timeout.tv_usec = 0;
          readfds.fd_count = 0;
          v21 = 0;
          while ( v21 < readfds.fd_count && readfds.fd_array[v21] != s )
            ++v21;
          if ( v21 == readfds.fd_count )
          {
            if ( (_DWORD)readfds.fd_count < 0x40u )
            {
              readfds.fd_array[v21] = s;
              ++readfds.fd_count;
            }
          }
          v8 = select(s + 1, &readfds, 0, 0, &timeout);
          v22 = v8;
          if ( !v8 )
          {
            v12 = -1;
            sub_4017F0((int)&v11);
            return 0;
          }
          if ( v22 < 0 )
          {
            v12 = -1;
            sub_4017F0((int)&v11);
            return 0;
          }
          if ( !_WSAFDIsSet(s, &readfds) )
          {
            v12 = -1;
            sub_4017F0((int)&v11);
            return 0;
          }
          len = 0;
          if ( ioctlsocket(s, 1074030207, &len) )
          {
            v12 = -1;
            sub_4017F0((int)&v11);
            return 0;
          }
        }
        if ( len < 1 )
        {
          v12 = -1;
          sub_4017F0((int)&v11);
          return 0;
        }
        if ( len > v20 )
          len = v20;
        v9 = recv(s, p->pkt.uin, len, 0);
        v23 = v9;
        if ( v9 <= 0 )
        {
          v12 = -1;
          sub_4017F0((int)&v11);
          return 0;
        }
        p->pkt.uin += v23;
        v20 -= v23;
      }
      v12 = -1;
      sub_4017F0((int)&v11);
      result = 1;
    }
    else
    {
      v12 = -1;
      sub_4017F0((int)&v11);
      result = 0;
    }
  }
  else
  {
    v12 = -1;
    sub_4017F0((int)&v11);
    result = 0;
  }
  return result;
}

//----- (0042D950) --------------------------------------------------------
int __fastcall sub_42D950(int a1)
{
  return sub_401E00(a1 + 8);
}

//----- (0042D970) --------------------------------------------------------
int __fastcall sub_42D970(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_401D90(a1 + 8);
  return v2;
}

//----- (0042D990) --------------------------------------------------------
int __thiscall sub_42D990(int this, int a2, unsigned int a3)
{
  int result; // eax@19
  int v4; // eax@3
  size_t v5; // ST08_4@6
  int v6; // ST04_4@6
  int v7; // eax@6
  int v8; // eax@9
  int v9; // eax@11
  int v10; // eax@13
  int v11; // eax@15
  int v12; // eax@18
  unsigned int v13; // ST08_4@20
  int v14; // ST04_4@20
  int v15; // eax@20
  int v16; // eax@20
  int v17; // [sp+0h] [bp-20h]@1
  u_short v18; // [sp+14h] [bp-Ch]@3
  u_short v19; // [sp+Ch] [bp-14h]@9
  u_short v20; // [sp+1Ch] [bp-4h]@11
  u_short v21; // [sp+10h] [bp-10h]@13
  unsigned int v22; // [sp+8h] [bp-18h]@13
  u_short v23; // [sp+18h] [bp-8h]@18
  unsigned int v24; // [sp+4h] [bp-1Ch]@18

  v17 = this;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  *(_WORD *)v17 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v17 + 4);
  v18 = htons(*(_WORD *)v17);
  v4 = sub_4019D0(a2, a3);
  memcpy((void *)v4, &v18, 2u);
  a3 += 2;
  if ( *(_WORD *)v17 )
  {
    if ( sub_4019B0(a2) < a3 + *(_WORD *)v17 )
      sub_401990(a2, a3 + *(_WORD *)v17);
    v5 = *(_WORD *)v17;
    v6 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(v17 + 4);
    v7 = sub_4019D0(a2, a3);
    memcpy((void *)v7, (const void *)v6, v5);
    a3 += *(_WORD *)v17;
  }
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v19 = htons(*(_WORD *)(v17 + 32));
  v8 = sub_4019D0(a2, a3);
  memcpy((void *)v8, &v19, 2u);
  a3 += 2;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v20 = htons(*(_WORD *)(v17 + 34));
  v9 = sub_4019D0(a2, a3);
  memcpy((void *)v9, &v20, 2u);
  a3 += 2;
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v21 = htons(*(_WORD *)(v17 + 36));
  v10 = sub_4019D0(a2, a3);
  memcpy((void *)v10, &v21, 2u);
  a3 += 2;
  *(_WORD *)(v17 + 38) = 0;
  v22 = 0;
  while ( v22 < sub_4095F0(v17 + 40) )
  {
    v11 = sub_401C80(v17 + 40, v22);
    *(_WORD *)(v17 + 38) += (unsigned __int16)sub_4019B0(v11 + 4) + 4;
    ++v22;
  }
  if ( sub_4019B0(a2) < a3 + 2 )
    sub_401990(a2, a3 + 2);
  v23 = htons(*(_WORD *)(v17 + 38));
  v12 = sub_4019D0(a2, a3);
  memcpy((void *)v12, &v23, 2u);
  a3 += 2;
  v24 = 0;
  while ( 1 )
  {
    result = sub_4095F0(v17 + 40);
    if ( v24 >= result )
      break;
    v13 = a3;
    v14 = a2;
    v15 = sub_401C80(v17 + 40, v24);
    sub_42CD30((u_short *)v15, v14, v13);
    v16 = sub_401C80(v17 + 40, v24);
    a3 += sub_4019B0(v16 + 4) + 4;
    ++v24;
  }
  return result;
}

//----- (0042DC90) --------------------------------------------------------
int __fastcall sub_42DC90(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_4331BC;
  return sub_42CC40(v2);
}

//----- (0042DCB0) --------------------------------------------------------
int __fastcall sub_42DCB0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_42CC70(a1);
  *(_DWORD *)v2 = &off_4331BC;
  return v2;
}

//----- (0042DCD0) --------------------------------------------------------
int __fastcall sub_42DCD0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_4331B4;
  return sub_42CC40(v2);
}

//----- (0042DCF0) --------------------------------------------------------
int __fastcall sub_42DCF0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_42CC70(a1);
  *(_DWORD *)v2 = &off_4331B4;
  return v2;
}

//----- (0042DD10) --------------------------------------------------------
int __thiscall sub_42DD10(int this, int a2, unsigned int a3)
{
  int result; // eax@2
  unsigned int v4; // ST08_4@3
  int v5; // ST04_4@3
  int v6; // eax@3
  int v7; // eax@3
  int v8; // [sp+0h] [bp-8h]@1
  unsigned int v9; // [sp+4h] [bp-4h]@1

  v8 = this;
  v9 = 0;
  while ( 1 )
  {
    result = sub_4095F0(v8 + 44);
    if ( v9 >= result )
      break;
    v4 = a3;
    v5 = a2;
    v6 = sub_401C80(v8 + 44, v9);
    sub_42CD30((u_short *)v6, v5, v4);
    v7 = sub_401C80(v8 + 44, v9);
    a3 += sub_4019B0(v7 + 4) + 4;
    ++v9;
  }
  return result;
}

//----- (0042DD90) --------------------------------------------------------
int __fastcall sub_42DD90(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_43319C;
  return sub_42CCE0(v2);
}

//----- (0042DDB0) --------------------------------------------------------
int __fastcall sub_42DDB0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  *(_DWORD *)a1 = &off_43318C;
  return sub_42CCE0(v2);
}

//----- (0042DDD0) --------------------------------------------------------
int __fastcall sub_42DDD0(int a1)
{
  int v2; // [sp+0h] [bp-4h]@1

  v2 = a1;
  sub_42CD00(a1);
  *(_DWORD *)v2 = &off_43318C;
  return v2;
}

//----- (0042DDF0) --------------------------------------------------------
int __thiscall sub_42DDF0(int this, int a2, unsigned int a3)
{
  int result; // eax@2
  unsigned int v4; // ST08_4@3
  int v5; // ST04_4@3
  int v6; // eax@3
  int v7; // eax@3
  int v8; // [sp+0h] [bp-8h]@1
  unsigned int v9; // [sp+4h] [bp-4h]@1

  v8 = this;
  v9 = 0;
  while ( 1 )
  {
    result = sub_4095F0(v8 + 4);
    if ( v9 >= result )
      break;
    v4 = a3;
    v5 = a2;
    v6 = sub_401C80(v8 + 4, v9);
    sub_42CD30((u_short *)v6, v5, v4);
    v7 = sub_401C80(v8 + 4, v9);
    a3 += sub_4019B0(v7 + 4) + 4;
    ++v9;
  }
  return result;
}

//----- (0042DE70) --------------------------------------------------------
int __thiscall sub_42DE70(int this, int a2, unsigned int a3)
{
  unsigned int v4; // eax@1
  int v5; // [sp+0h] [bp-4h]@1

  v5 = this;
  sub_42CB30(this, a2, a3);
  v4 = a3 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(v5 + 16) + 11;
  a3 = v4;
  return sub_42DD10(v5, a2, v4);
}

//----- (0042DEC0) --------------------------------------------------------
int __thiscall sub_42DEC0(int this, int a2, unsigned int a3)
{
  return sub_42DDF0(this, a2, a3);
}

//----- (0042DEE0) --------------------------------------------------------
int __thiscall sub_42DEE0(int this, int a2, unsigned int a3)
{
  int v4; // eax@3
  int v5; // [sp+0h] [bp-8h]@1
  u_long hostlong; // [sp+4h] [bp-4h]@3

  v5 = this;
  if ( sub_4019B0(a2) < a3 + 4 )
    sub_401990(a2, a3 + 4);
  hostlong = htonl(1u);
  v4 = sub_4019D0(a2, a3);
  memcpy((void *)v4, &hostlong, 4u);
  a3 += 4;
  return sub_42DDF0(v5, a2, a3);
}

//----- (0042DF60) --------------------------------------------------------
char __thiscall sub_42DF60(void *this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@3
  int v5; // ST08_4@5
  int v6; // eax@5
  int v7; // eax@7
  int v8; // eax@9
  int v9; // eax@11
  int v10; // eax@13
  void *v11; // [sp+4h] [bp-34h]@1
  unsigned int v12; // [sp+28h] [bp-10h]@15
  char v13; // [sp+Ch] [bp-2Ch]@20
  signed int v14; // [sp+34h] [bp-4h]@20
  char v15; // [sp+10h] [bp-28h]@22

  v11 = this;
  if ( sub_4019B0(a2) >= a3 + 2 )
  {
    v4 = sub_4019D0(a2, a3);
    memcpy(v11, (const void *)v4, 2u);
    *(_WORD *)v11 = ntohs(*(_WORD *)v11);
    a3 += 2;
    if ( sub_4019B0(a2) >= a3 + *(_WORD *)v11 )
    {
      v5 = *(_WORD *)v11;
      v6 = sub_4019D0(a2, a3);
      std__basic_string_char_std__char_traits_char__std__allocator_char____assign((char *)v11 + 4, v6, v5);
      a3 += std__basic_string_char_std__char_traits_char__std__allocator_char____length((char *)v11 + 4);
      if ( sub_4019B0(a2) >= a3 + 2 )
      {
        v7 = sub_4019D0(a2, a3);
        memcpy((char *)v11 + 32, (const void *)v7, 2u);
        *((_WORD *)v11 + 16) = ntohs(*((_WORD *)v11 + 16));
        a3 += 2;
        if ( sub_4019B0(a2) >= a3 + 2 )
        {
          v8 = sub_4019D0(a2, a3);
          memcpy((char *)v11 + 34, (const void *)v8, 2u);
          *((_WORD *)v11 + 17) = ntohs(*((_WORD *)v11 + 17));
          a3 += 2;
          if ( sub_4019B0(a2) >= a3 + 2 )
          {
            v9 = sub_4019D0(a2, a3);
            memcpy((char *)v11 + 36, (const void *)v9, 2u);
            *((_WORD *)v11 + 18) = ntohs(*((_WORD *)v11 + 18));
            a3 += 2;
            if ( sub_4019B0(a2) >= a3 + 2 )
            {
              v10 = sub_4019D0(a2, a3);
              memcpy((char *)v11 + 38, (const void *)v10, 2u);
              *((_WORD *)v11 + 19) = ntohs(*((_WORD *)v11 + 19));
              a3 += 2;
              if ( sub_4019B0(a2) >= a3 + *((_WORD *)v11 + 19) )
              {
                v12 = a3;
                sub_401D30((int)((char *)v11 + 40));
                while ( 1 )
                {
                  if ( a3 > v12 + *((_WORD *)v11 + 19) )
                    return 0;
                  if ( a3 == v12 + *((_WORD *)v11 + 19) )
                    return 1;
                  sub_42C060((int)&v13);
                  v14 = 0;
                  if ( !(unsigned __int8)sub_42CE20((int)&v13, a2, a3) )
                    break;
                  sub_401CB0((int)((char *)v11 + 40), (int)&v13);
                  a3 += sub_4019B0((int)&v15) + 4;
                  v14 = -1;
                  sub_42BCD0((int)&v13);
                }
                v14 = -1;
                sub_42BCD0((int)&v13);
                result = 0;
              }
              else
              {
                result = 0;
              }
            }
            else
            {
              result = 0;
            }
          }
          else
          {
            result = 0;
          }
        }
        else
        {
          result = 0;
        }
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042E270) --------------------------------------------------------
int __thiscall sub_42E270(int this, int a2)
{
  int v3; // eax@1
  int v4; // eax@1
  int v5; // eax@1
  int v6; // eax@1
  int v7; // eax@1
  int v8; // eax@1
  int v9; // eax@1
  int v10; // eax@1
  int v11; // [sp+2Ch] [bp-D8h]@1
  char v12; // [sp+DCh] [bp-28h]@1
  signed int v13; // [sp+100h] [bp-4h]@1
  unsigned int v14; // [sp+BCh] [bp-48h]@1
  u_short v15; // [sp+F4h] [bp-10h]@1
  char v16; // [sp+C0h] [bp-44h]@1
  char v17; // [sp+A0h] [bp-64h]@1
  int v18; // [sp+28h] [bp-DCh]@1
  int v19; // [sp+24h] [bp-E0h]@1
  char v20; // [sp+C4h] [bp-40h]@1
  char v21; // [sp+84h] [bp-80h]@1
  char v22; // [sp+68h] [bp-9Ch]@1
  char v23; // [sp+4Ch] [bp-B8h]@1
  char v24; // [sp+30h] [bp-D4h]@1

  v11 = this;
  sub_401700((int)&v12);
  v13 = 0;
  sub_42C440((void *)(v11 + 36), (int)&v12, 0);
  sub_401990(a2, 0x1Au);
  v14 = 0;
  v15 = htons(*(_WORD *)v11);
  v3 = sub_4019D0(a2, v14);
  memcpy((void *)v3, &v15, 2u);
  v14 = 2;
  v4 = sub_4019D0(a2, v14);
  memcpy((void *)v4, (const void *)(v11 + 2), 8u);
  v14 = 10;
  v5 = sub_4019D0(a2, v14);
  memcpy((void *)v5, (const void *)(v11 + 10), 0x10u);
  v14 = 26;
  sub_42CD00((int)&v16);
  LOBYTE(v13) = 1;
  v6 = sub_4013E0((int)&v17, *(_DWORD *)(v11 + 28), 3);
  v18 = v6;
  v19 = v6;
  LOBYTE(v13) = 2;
  sub_401CB0((int)&v20, v6);
  LOBYTE(v13) = 1;
  sub_42BCD0((int)&v17);
  v7 = sub_401370((int)&v21, *(_WORD *)(v11 + 32), 5);
  LOBYTE(v13) = 3;
  sub_401CB0((int)&v20, v7);
  LOBYTE(v13) = 1;
  sub_42BCD0((int)&v21);
  v8 = sub_401370((int)&v22, 1u, 10);
  LOBYTE(v13) = 4;
  sub_401CB0((int)&v20, v8);
  LOBYTE(v13) = 1;
  sub_42BCD0((int)&v22);
  v9 = sub_401550((int)&v23, 0, 0, 15);
  LOBYTE(v13) = 5;
  sub_401CB0((int)&v20, v9);
  LOBYTE(v13) = 1;
  sub_42BCD0((int)&v23);
  v10 = sub_4014E0((int)&v24, (int)&v12, 10001);
  LOBYTE(v13) = 6;
  sub_401CB0((int)&v20, v10);
  LOBYTE(v13) = 1;
  sub_42BCD0((int)&v24);
  sub_42DDF0((int)&v16, a2, v14);
  LOBYTE(v13) = 0;
  sub_42CCE0((int)&v16);
  v13 = -1;
  return sub_4017F0((int)&v12);
}

//----- (0042E510) --------------------------------------------------------
int __thiscall sub_42E510(int this, int a2)
{
  int ST04_4_0; // ST04_4@0
  int ST08_4_0; // ST08_4@0
  int ST0C_4_0; // ST0C_4@0
  int ST10_4_0; // ST10_4@0
  unsigned int v7; // ST20_4@1
  int v8; // eax@1
  int v9; // eax@1
  int v10; // eax@1
  int v11; // eax@1
  int v12; // eax@1
  int v13; // eax@1
  int v14; // ST1C_4@1
  int v15; // eax@1
  int v16; // ST14_4@1
  int v17; // ST18_4@1
  __int16 v18; // ST1C_2@1
  int  s; // [sp+8Ch] [bp+0h]@1
  unsigned int v20; // [sp+74h] [bp-18h]@1
  int v21; // [sp+8h] [bp-84h]@1
  char v22; // [sp+4Ch] [bp-40h]@1
  signed int v23; // [sp+88h] [bp-4h]@1
  char v24; // [sp+64h] [bp-28h]@1
  char v25; // [sp+65h] [bp-27h]@1
  char v26; // [sp+66h] [bp-26h]@1
  char v27; // [sp+67h] [bp-25h]@1
  char v28; // [sp+68h] [bp-24h]@1
  char v29; // [sp+69h] [bp-23h]@1
  char v30; // [sp+6Ah] [bp-22h]@1
  char v31; // [sp+6Bh] [bp-21h]@1
  char v32; // [sp+6Ch] [bp-20h]@1
  char v33; // [sp+6Dh] [bp-1Fh]@1
  char v34; // [sp+6Eh] [bp-1Eh]@1
  char v35; // [sp+6Fh] [bp-1Dh]@1
  char v36; // [sp+70h] [bp-1Ch]@1
  u_short v37; // [sp+78h] [bp-14h]@1
  u_short v38; // [sp+7Ch] [bp-10h]@1
  u_short v39; // [sp+48h] [bp-44h]@1
  char v40; // [sp+2Ch] [bp-60h]@1
  int *v41; // [sp+Ch] [bp-80h]@1
  int v42; // [sp+4h] [bp-88h]@1
  char v43; // [sp+10h] [bp-7Ch]@1
  int v44; // [sp+0h] [bp-8Ch]@1

  v20 = (unsigned int)& s ^ dword_43901C;
  v7 = (unsigned int)& s ^ dword_43901C;
  v21 = this;
  v8 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(this + 4);
  sub_401770((int)&v22, v8 + 13);
  v23 = 0;
  v24 = 5;
  v25 = 1;
  v26 = 0;
  v27 = 1;
  v28 = 1;
  v29 = 1;
  v30 = 1;
  v31 = 0;
  v32 = 26;
  v33 = 0;
  v34 = 0;
  v35 = -1;
  v36 = -1;
  v9 = sub_4019D0((int)&v22, 0);
  memcpy((void *)v9, &v24, 0xDu);
  v10 = std__basic_string_char_std__char_traits_char__std__allocator_char____length(v21 + 4) + 4;
  v37 = v10;
  v37 = htons(v10);
  v11 = sub_4019D0((int)&v22, 7u);
  memcpy((void *)v11, &v37, 2u);
  v38 = htons(*(_WORD *)v21);
  v12 = sub_4019D0((int)&v22, 9u);
  memcpy((void *)v12, &v38, 2u);
  v39 = htons(*(_WORD *)(v21 + 2));
  v13 = sub_4019D0((int)&v22, 0xBu);
  memcpy((void *)v13, &v39, 2u);
  std__basic_string_char_std__char_traits_char__std__allocator_char____length(v21 + 4);
  v14 = std__basic_string_char_std__char_traits_char__std__allocator_char____data(v21 + 4);
  v15 = sub_4019D0((int)&v22, 0xDu);
  memcpy((void *)v15, (const void *)v14, v7);
  sub_4014E0((int)&v40, (int)&v22, 2);
  LOBYTE(v23) = 1;
  v41 = &ST04_4_0;
  v42 = std__basic_string_char_std__char_traits_char__std__allocator_char____basic_string_char_std__char_traits_char__std__allocator_char__(&ST04_4_0);
  v44 = sub_401450((int)&v43, (char)&unk_432A32, ST04_4_0, ST08_4_0, ST0C_4_0, ST10_4_0, v16, v17, v18);
  LOBYTE(v23) = 2;
  sub_401D30(a2);
  sub_401CB0(a2, (int)&v43);
  sub_401CB0(a2, (int)&v40);
  LOBYTE(v23) = 1;
  sub_42BCD0((int)&v43);
  LOBYTE(v23) = 0;
  sub_42BCD0((int)&v40);
  v23 = -1;
  return sub_4017F0((int)&v22);
}

//----- (0042E720) --------------------------------------------------------
char __thiscall sub_42E720(int this, int a2, unsigned int a3)
{
  int v4; // [sp+4h] [bp-30h]@1
  char v5; // [sp+Ch] [bp-28h]@4
  signed int v6; // [sp+30h] [bp-4h]@4
  char v7; // [sp+10h] [bp-24h]@6

  v4 = this;
  sub_401D30(this + 44);
  while ( 1 )
  {
    if ( a3 >= sub_4019B0(a2) )
      return 1;
    sub_42C060((int)&v5);
    v6 = 0;
    if ( !(unsigned __int8)sub_42CE20((int)&v5, a2, a3) )
      break;
    sub_401CB0(v4 + 44, (int)&v5);
    a3 += sub_4019B0((int)&v7) + 4;
    v6 = -1;
    sub_42BCD0((int)&v5);
  }
  v6 = -1;
  sub_42BCD0((int)&v5);
  return 0;
}

//----- (0042E800) --------------------------------------------------------
char __thiscall sub_42E800(int this, int a2, unsigned int a3)
{
  int v4; // [sp+4h] [bp-30h]@1
  char v5; // [sp+Ch] [bp-28h]@4
  signed int v6; // [sp+30h] [bp-4h]@4
  char v7; // [sp+10h] [bp-24h]@6

  v4 = this;
  sub_401D30(this + 4);
  while ( 1 )
  {
    if ( a3 >= sub_4019B0(a2) )
      return 1;
    sub_42C060((int)&v5);
    v6 = 0;
    if ( !(unsigned __int8)sub_42CE20((int)&v5, a2, a3) )
      break;
    sub_401CB0(v4 + 4, (int)&v5);
    a3 += sub_4019B0((int)&v7) + 4;
    v6 = -1;
    sub_42BCD0((int)&v5);
  }
  v6 = -1;
  sub_42BCD0((int)&v5);
  return 0;
}

//----- (0042E8E0) --------------------------------------------------------
char __thiscall sub_42E8E0(int this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@5
  int v5; // eax@12
  int  s; // [sp+5Ch] [bp+0h]@1
  unsigned int v7; // [sp+48h] [bp-14h]@1
  int v8; // [sp+0h] [bp-5Ch]@1
  signed int v9; // [sp+4Ch] [bp-10h]@5
  __int16 v10; // [sp+8h] [bp-54h]@7
  signed int v11; // [sp+58h] [bp-4h]@7
  unsigned __int16 v12; // [sp+2Eh] [bp-2Eh]@9

  v7 = (unsigned int)& s ^ dword_43901C;
  v8 = this;
  if ( sub_4019B0(a2) >= a3 + 1 )
  {
    *(_BYTE *)v8 = *(_BYTE *)sub_4019D0(a2, a3++);
    if ( sub_4019B0(a2) >= a3 + 2 )
    {
      v4 = sub_4019D0(a2, a3);
      memcpy((void *)(v8 + 2), (const void *)v4, 2u);
      *(_WORD *)(v8 + 2) = ntohs(*(_WORD *)(v8 + 2));
      a3 += 2;
      v9 = 0;
      while ( v9 < *(_WORD *)(v8 + 2) )
      {
        sub_42C3E0((int)&v10);
        v11 = 0;
        if ( !(unsigned __int8)sub_42DF60(&v10, a2, a3) )
        {
          v11 = -1;
          sub_42C3B0((int)&v10);
          return 0;
        }
        sub_401E60(v8 + 8, (int)&v10);
        a3 += v12 + v10 + 10;
        v11 = -1;
        sub_42C3B0((int)&v10);
        ++v9;
      }
      if ( sub_4019B0(a2) >= a3 + 4 )
      {
        v5 = sub_4019D0(a2, a3);
        memcpy((void *)(v8 + 4), (const void *)v5, 4u);
        *(_DWORD *)(v8 + 4) = ntohl(*(_DWORD *)(v8 + 4));
        result = 1;
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042EA90) --------------------------------------------------------
int __thiscall sub_42EA90(int this, int a2)
{
  int v3; // eax@1
  int v4; // [sp+Ch] [bp-44h]@1
  char v5; // [sp+2Ch] [bp-24h]@1
  signed int v6; // [sp+4Ch] [bp-4h]@1
  char v7; // [sp+10h] [bp-40h]@1

  v4 = this;
  sub_401D30(a2);
  sub_401700((int)&v5);
  v6 = 0;
  sub_42E270(v4 + 16, (int)&v5);
  v3 = sub_4014E0((int)&v7, (int)&v5, 5);
  LOBYTE(v6) = 1;
  sub_401CB0(a2, v3);
  LOBYTE(v6) = 0;
  sub_42BCD0((int)&v7);
  v6 = -1;
  return sub_4017F0((int)&v5);
}

//----- (0042EB40) --------------------------------------------------------
char __thiscall sub_42EB40(void *this, int a2)
{
  char result; // al@2
  int v3; // eax@3
  int v4; // eax@5
  int v5; // eax@7
  int v6; // eax@9
  int v7; // eax@12
  int v8; // eax@15
  void *v9; // [sp+4h] [bp-3Ch]@1
  unsigned int v10; // [sp+10h] [bp-30h]@1
  char v11; // [sp+14h] [bp-2Ch]@7
  signed int v12; // [sp+3Ch] [bp-4h]@7
  int v13; // [sp+30h] [bp-10h]@9

  v9 = this;
  v10 = 0;
  if ( sub_4019B0(a2) >= v10 + 2 )
  {
    v3 = sub_4019D0(a2, v10);
    memcpy(v9, (const void *)v3, 2u);
    *(_WORD *)v9 = ntohs(*(_WORD *)v9);
    v10 += 2;
    if ( sub_4019B0(a2) >= v10 + 8 )
    {
      v4 = sub_4019D0(a2, v10);
      memcpy((char *)v9 + 2, (const void *)v4, 8u);
      v10 += 8;
      if ( sub_4019B0(a2) >= v10 + 16 )
      {
        v5 = sub_4019D0(a2, v10);
        memcpy((char *)v9 + 10, (const void *)v5, 0x10u);
        v10 += 16;
        sub_42CD00((int)&v11);
        v12 = 0;
        if ( sub_42E800((int)&v11, a2, v10) )
        {
          v6 = sub_42BB80((int)&v11, 4u);
          v13 = v6;
          if ( !v6 || (unsigned __int8)sub_42BC20(v13, (int)((char *)v9 + 28)) )
          {
            v7 = sub_42BB80((int)&v11, 5u);
            v13 = v7;
            if ( !v7 || (unsigned __int8)sub_42BC70(v13, (int)((char *)v9 + 32)) )
            {
              v8 = sub_42BB80((int)&v11, 0x2711u);
              v13 = v8;
              if ( v8 )
              {
                if ( sub_42B4D0((char *)v9 + 36, v13 + 4, 0) )
                {
                  v12 = -1;
                  sub_42CCE0((int)&v11);
                  result = 1;
                }
                else
                {
                  v12 = -1;
                  sub_42CCE0((int)&v11);
                  result = 0;
                }
              }
              else
              {
                v12 = -1;
                sub_42CCE0((int)&v11);
                result = 0;
              }
            }
            else
            {
              v12 = -1;
              sub_42CCE0((int)&v11);
              result = 0;
            }
          }
          else
          {
            v12 = -1;
            sub_42CCE0((int)&v11);
            result = 0;
          }
        }
        else
        {
          v12 = -1;
          sub_42CCE0((int)&v11);
          result = 0;
        }
      }
      else
      {
        result = 0;
      }
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042ED90) --------------------------------------------------------
char __thiscall sub_42ED90(int this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@5
  int v5; // eax@5
  int v6; // [sp+4h] [bp-38h]@1
  u_short v7; // [sp+2Ch] [bp-10h]@5
  signed int v8; // [sp+28h] [bp-14h]@5
  char v9; // [sp+Ch] [bp-30h]@7
  signed int v10; // [sp+38h] [bp-4h]@7
  char v11; // [sp+10h] [bp-2Ch]@9

  v6 = this;
  if ( sub_4019B0(a2) >= a3 + 15 )
  {
    if ( sub_42BF30(v6, a2, a3) )
    {
      v4 = a3 + std__basic_string_char_std__char_traits_char__std__allocator_char____length(v6 + 16) + 11;
      a3 = v4 + 2;
      v5 = sub_4019D0(a2, v4 + 2);
      memcpy(&v7, (const void *)v5, 2u);
      v7 = ntohs(v7);
      a3 += 2;
      v8 = 0;
      while ( v8 < v7 )
      {
        sub_42C060((int)&v9);
        v10 = 0;
        if ( !(unsigned __int8)sub_42CE20((int)&v9, a2, a3) )
        {
          v10 = -1;
          sub_42BCD0((int)&v9);
          return 0;
        }
        a3 += sub_4019B0((int)&v11) + 4;
        v10 = -1;
        sub_42BCD0((int)&v9);
        ++v8;
      }
      if ( sub_42E720(v6, a2, a3) )
        result = 1;
      else
        result = 0;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042EEF0) --------------------------------------------------------
char __thiscall sub_42EEF0(int this, int a2, unsigned int a3)
{
  return sub_42E800(this, a2, a3);
}

//----- (0042EF10) --------------------------------------------------------
char __thiscall sub_42EF10(int this, int a2, unsigned int a3)
{
  char result; // al@2
  int v4; // eax@3
  signed int v5; // eax@3
  int v6; // [sp+0h] [bp-8h]@1
  u_long netlong; // [sp+4h] [bp-4h]@3

  v6 = this;
  if ( sub_4019B0(a2) >= a3 + 4 )
  {
    v4 = sub_4019D0(a2, a3);
    memcpy(&netlong, (const void *)v4, 4u);
    v5 = ntohl(netlong);
    netlong = v5;
    if ( v5 == 1 )
    {
      a3 += 4;
      result = sub_42E800(v6, a2, a3);
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

//----- (0042EF80) --------------------------------------------------------
char __thiscall sub_42EF80(int this, int a2)
{
  char result; // al@3
  int v3; // eax@1
  int v4; // eax@4
  int v5; // eax@7
  int v6; // eax@10
  int v7; // eax@13
  int v8; // [sp+4h] [bp-38h]@1
  char v9; // [sp+10h] [bp-2Ch]@1
  signed int v10; // [sp+38h] [bp-4h]@1
  char v11; // [sp+14h] [bp-28h]@1
  int v12; // [sp+2Ch] [bp-10h]@1

  v8 = this;
  sub_42CD00((int)&v9);
  v10 = 0;
  sub_401AF0((int)&v11, a2);
  *(_WORD *)v8 = 0;
  v3 = sub_42BB80((int)&v9, 1u);
  v12 = v3;
  if ( !v3 || (unsigned __int8)sub_42BC70(v12, v8) )
  {
    *(_DWORD *)(v8 + 4) = 0;
    v4 = sub_42BB80((int)&v9, 6u);
    v12 = v4;
    if ( !v4 || (unsigned __int8)sub_42BC20(v12, v8 + 4) )
    {
      *(_DWORD *)(v8 + 8) = 0;
      v5 = sub_42BB80((int)&v9, 0xFu);
      v12 = v5;
      if ( !v5 || (unsigned __int8)sub_42BC20(v12, v8 + 8) )
      {
        *(_DWORD *)(v8 + 12) = 0;
        v6 = sub_42BB80((int)&v9, 3u);
        v12 = v6;
        if ( !v6 || (unsigned __int8)sub_42BC20(v12, v8 + 12) )
        {
          v7 = sub_42BB80((int)&v9, 5u);
          v12 = v7;
          if ( v7 )
          {
            if ( sub_42EB40((void *)(v8 + 16), v12 + 4) )
            {
              v10 = -1;
              sub_42CCE0((int)&v9);
              result = 1;
            }
            else
            {
              v10 = -1;
              sub_42CCE0((int)&v9);
              result = 0;
            }
          }
          else
          {
            v10 = -1;
            sub_42CCE0((int)&v9);
            result = 0;
          }
        }
        else
        {
          v10 = -1;
          sub_42CCE0((int)&v9);
          result = 0;
        }
      }
      else
      {
        v10 = -1;
        sub_42CCE0((int)&v9);
        result = 0;
      }
    }
    else
    {
      v10 = -1;
      sub_42CCE0((int)&v9);
      result = 0;
    }
  }
  else
  {
    v10 = -1;
    sub_42CCE0((int)&v9);
    result = 0;
  }
  return result;
}

//----- (0042F180) --------------------------------------------------------
unsigned int __thiscall sub_42F180(int this, int a2, int a3)
{
  unsigned int result; // eax@2
  int v4; // ebx@8
  int v5; // ebx@8
  int v6; // ebx@9
  int v7; // ebx@9
  int v8; // ebx@11
  int v9; // ebx@11
  int v10; // [sp+4h] [bp-10h]@1
  unsigned int v11; // [sp+10h] [bp-4h]@1
  int v12; // [sp+Ch] [bp-8h]@1
  char v13; // [sp+Bh] [bp-9h]@8
  char v14; // [sp+Ah] [bp-Ah]@9
  char v15; // [sp+9h] [bp-Bh]@11

  v10 = this;
  v11 = 0;
  v12 = std__basic_string_char_std__char_traits_char__std__allocator_char____size(a2);
  std__basic_string_char_std__char_traits_char__std__allocator_char____operator_(a3, &unk_432A3D);
  while ( 1 )
  {
    result = v11;
    if ( v11 >= v12 )
      break;
    while ( v11 < v12
         && (*(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a2, v11) == 13
          || *(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a2, v11) == 10) )
      ++v11;
    if ( v11 < v12 )
    {
      v4 = 4
         * byte_439090[*(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(
                                   a2,
                                   v11)] & 0xFC;
      v5 = ((byte_439090[*(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(
                                     a2,
                                     v11 + 1)] >> 4) & 3)
         + v4;
      v13 = v5;
      std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a3, (unsigned __int8)v5);
      if ( *(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a2, v11 + 2) != 61 )
      {
        v6 = 16
           * byte_439090[*(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(
                                     a2,
                                     v11 + 1)] & 0xF0;
        v7 = ((byte_439090[*(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(
                                       a2,
                                       v11 + 2)] >> 2) & 0xF)
           + v6;
        v14 = v7;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a3, (unsigned __int8)v7);
      }
      if ( *(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a2, v11 + 3) != 61 )
      {
        v8 = (byte_439090[*(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(
                                      a2,
                                      v11 + 2)] << 6) & 0xC0;
        v9 = byte_439090[*(_BYTE *)std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(
                                     a2,
                                     v11 + 3)]
           + v8;
        v15 = v9;
        std__basic_string_char_std__char_traits_char__std__allocator_char____operator__(a3, (unsigned __int8)v9);
      }
      v11 += 4;
    }
  }
  return result;
}

//----- (00431D60) --------------------------------------------------------
int __cdecl sub_431D60()
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&unk_439640);
}

//----- (00431D70) --------------------------------------------------------
int __cdecl sub_431D70()
{
  return std__basic_string_char_std__char_traits_char__std__allocator_char_____basic_string_char_std__char_traits_char__std__allocator_char__(&unk_439624);
}

#error "There were 9 decompilation failure(s) on 907 function(s)"
